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

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

more cleanup

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