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

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

CoRE tool fix

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