source: icGREP/icgrep-devel/icgrep/combine/core.cpp @ 5516

Last change on this file since 5516 was 5516, checked in by faldebey, 21 months ago

added combinatorial testing tool

File size: 2.3 KB
Line 
1#include <string>
2#include <vector>
3#include <fstream>
4#include <boost/algorithm/string/classification.hpp>
5#include <boost/algorithm/string/split.hpp>
6#include <iostream>
7#include <algorithm>
8#include "regexgen.h"
9#include "stringGen.h"
10#include <boost/program_options.hpp>
11#include "pugixml/src/pugixml.hpp"
12#include "icgrep-test/icgrep-test.h"
13
14
15
16
17using namespace std;
18using testcase = pair<string, vector<string>>;
19
20
21
22void writeREtoFile(string re, string dir, int fileNo){
23        string fileName = dir + to_string(fileNo);
24        FILE * file;
25        file = fopen(fileName.c_str(), "w");
26        fprintf(file, "%s", re.c_str());
27        fclose(file);
28}
29
30std::vector<string> vectorizeLine(string line){
31        std::vector<string> elements;
32        boost::split(elements, line, boost::is_any_of(","), boost::token_compress_on);
33        return elements;
34}
35
36std::vector<string> setOptions(std::vector<string> header, string xml){
37        if (!xml.empty()){
38                std::vector<string> options;
39                pugi::xml_document doc;
40                doc.load_file(xml.c_str());
41                for (auto op : header){
42                        bool added = false;
43                        for (auto parameter : doc.first_child().children()){
44                                if (parameter.attribute("name").value() == op){
45                                        string sch(parameter.child("Switch").child_value());
46                                        if (sch == "on"){
47                                                options.push_back(op);
48                                                added =  true;
49                                        }
50                                }
51                        }
52                        if (!added){
53                                options.push_back("off");
54                        }
55                       
56                }
57                return options;
58        }
59       
60        return header;
61       
62
63}
64int main (int argc, char *argv[]) { 
65        if (argc > 3) {
66                cout << "incorrect arguments!\n";
67        cout<< "usage: " << argv[0] << " <combinatorial csv file name> <options xml file name>\n";
68    }
69        else {
70                IcgrepTest ictest;
71                system("exec rm -r ../icgrep/combine/regs/*");
72                system("exec rm -r ../icgrep/combine/files/*");
73                ictest.prepare();
74
75                string csv = (argc > 1)? argv[1] : "../icgrep/combine/icGrep-output.csv";
76                string xml = (argc > 2)? argv[2] : "";
77
78                ifstream file;
79                file.open(csv);
80                if (!file.is_open()){
81                        cout<<"Could not open input file\n";
82                }
83
84                string line;
85                vector<string> row;
86                getline(file, line);
87                vector<string> header = setOptions(vectorizeLine(line), xml);
88                int rownum = 1;
89                std::vector<testcase> Testcases;
90                while(getline(file, line)){
91                        row = vectorizeLine(line);
92
93                        RegexGen reGen(header, row);
94                        ictest.buildTest(reGen.RE, reGen.flags, reGen.syntax, rownum);
95                        ++rownum;
96                }
97                ictest.execute();
98                ictest.getResult();
99                file.close();
100               
101        }
102
103}
Note: See TracBrowser for help on using the repository browser.