source: icGREP/icgrep-devel/icgrep/combine/icgrep-test/icgrep-test.cpp @ 5533

Last change on this file since 5533 was 5533, checked in by faldebey, 2 years ago

more bug fixes and cleanup for testing tool

File size: 9.1 KB
Line 
1#include "icgrep-test.h"
2#include "../stringGen.h"
3#include <iostream>
4#include <vector>
5#include <string>
6#include <algorithm>
7#include <fstream>
8#include <boost/filesystem.hpp>
9#include <boost/iostreams/device/mapped_file.hpp>
10
11
12using namespace std;
13namespace io = boost::iostreams;
14
15IcgrepTest::IcgrepTest(){}
16
17void IcgrepTest::resetBash(string fileName){
18        ofstream file;
19        file.open(fileName);
20        file << "#!/bin/bash\n\n";
21        file << "echo \"Starting bash file: " << fileName << "\"\n";
22        file.close();
23        //give permission.
24        string cmd = "chmod +x " + fileName;
25        system(cmd.c_str());
26}
27
28void IcgrepTest::clearDir(string dir){
29        namespace fs=boost::filesystem;
30        fs::path path_to_remove(dir);
31        for (fs::directory_iterator end_dir_it, it(path_to_remove); it!=end_dir_it; ++it) {
32                fs::remove_all(it->path());
33        }
34}
35void IcgrepTest::writeToBash(string fileName, string value){
36        ofstream file;
37        file.open(fileName, ios::app);
38        file << value << endl;
39        file.close();
40}
41void IcgrepTest::writetoFile(string content, string dir, int fileNo){
42        string fileName = dir + to_string(fileNo);
43        ofstream file;
44        file.open(fileName);
45        if (!file.is_open()){
46                cout << "Could not open input file\n";
47        }
48        file << content << endl;
49        file.close();
50}
51
52void IcgrepTest::prepare(){
53        clearDir("../icgrep/combine/regs");
54        clearDir("../icgrep/combine/files");
55        resetBash("../icgrep/combine/icgrep-test/grep/icgrep-bash.sh");
56        resetBash("../icgrep/combine/icgrep-test/grep/grep-bash.sh");
57        resetBash("../icgrep/combine/icgrep-test/pcre/icgrep-bash.sh");
58        resetBash("../icgrep/combine/icgrep-test/pcre/pcre-bash.sh");
59        remove("..//icgrep/combine/icgrep-test/grep/icgrep-result");
60        remove("..//icgrep/combine/icgrep-test/grep/grep-result");
61        remove("..//icgrep/combine/icgrep-test/pcre/icgrep-result");
62        remove("..//icgrep/combine/icgrep-test/pcre/pcre-result");
63}
64
65bool IcgrepTest::hasFlag(string flag, std::vector<string> flags){
66        return (std::find(flags.begin(), flags.end(), flag) != flags.end()) ? true : false;
67}
68
69std::vector<string> IcgrepTest::removeFlag(string flag, std::vector<string> flags){
70        flags.erase(std::remove(flags.begin(), flags.end(), flag), flags.end());
71        return flags;
72}
73
74void IcgrepTest::buildTest(string re, vector<string> flags, re::RE_Syntax syntax, int testNum){
75        cout << "test: " << testNum << endl;
76        cout << "RE: \'" << re << "\'" << endl;
77
78        string reDir = "../icgrep/combine/regs/reg";
79        string strDir = "../icgrep/combine/files/file";
80
81        StringGenerator strGen;
82        writetoFile(strGen.generate(re, flags, syntax) + "\n", strDir, testNum);
83
84        if (syntax == re::RE_Syntax::ERE){
85                string icgrepScript = "../icgrep/combine/icgrep-test/grep/icgrep-bash.sh";
86                string grepScript = "../icgrep/combine/icgrep-test/grep/grep-bash.sh";
87                string icgrepResult = "../icgrep/combine/icgrep-test/grep/icgrep-result";
88                string grepResult = "../icgrep/combine/icgrep-test/grep/grep-result";
89
90                writeToBash(icgrepScript, "echo \"" + re + "\" | tee -a " + icgrepResult);
91                writeToBash(grepScript, "echo \"" + re + "\" | tee -a " + grepResult);
92
93                if (hasFlag("-f", flags)){
94                        flags = removeFlag("-f", flags);
95                        flags = removeFlag("-e", flags);
96                        writetoFile(re, reDir, testNum);
97               
98                        writeToBash(icgrepScript, 
99                                "./icgrep " + strGen.stringifyVec(flags, " ") + " -f " + reDir + to_string(testNum)+
100                                 " " + strDir + to_string(testNum) + " >> " + icgrepResult + "\n");
101
102                        writeToBash(grepScript, 
103                                "grep " + strGen.stringifyVec(flags, " ") + " -f " + reDir + to_string(testNum) + 
104                                " " + strDir + to_string(testNum) + " >> " + grepResult + "\n");
105                       
106                }
107                else if (hasFlag("-e", flags)){
108                        flags = removeFlag("-f", flags);
109                        flags = removeFlag("-e", flags);
110                        writeToBash(icgrepScript, 
111                                "./icgrep " + strGen.stringifyVec(flags, " ") + " -e \'" + re + "\' " +
112                                " " + strDir + to_string(testNum) + " >> " + icgrepResult + "\n");
113
114                        writeToBash(grepScript, 
115                                "grep " + strGen.stringifyVec(flags, " ") + " -e \'" + re + "\' " +
116                                " " + strDir + to_string(testNum) + " >> " + grepResult + "\n");
117                }
118                else{
119                       
120                        writeToBash(icgrepScript, 
121                                "./icgrep " + strGen.stringifyVec(flags, " ") + " \'" + re + "\' " +
122                                " " + strDir + to_string(testNum) + " >> " + icgrepResult + "\n");
123
124                        writeToBash(grepScript, 
125                                "grep " + strGen.stringifyVec(flags, " ") + " \'" + re + "\' " +
126                                " " + strDir + to_string(testNum) + " >> " + grepResult + "\n");
127
128                }
129        }
130        else if (syntax == re::RE_Syntax::BRE){
131
132                string icgrepScript = "../icgrep/combine/icgrep-test/grep/icgrep-bash.sh";
133                string grepScript = "../icgrep/combine/icgrep-test/grep/grep-bash.sh";
134                string icgrepResult = "../icgrep/combine/icgrep-test/grep/icgrep-result";
135                string grepResult = "../icgrep/combine/icgrep-test/grep/grep-result";
136                vector<string> gflags;
137
138                writeToBash(icgrepScript, "echo \"" + re + "\" | tee -a " + icgrepResult);
139                writeToBash(grepScript, "echo \"" + re + "\" | tee -a " + grepResult);
140
141                if (hasFlag("-f", flags)){
142                        flags = removeFlag("-f", flags);
143                        flags = removeFlag("-e", flags);
144                        gflags = removeFlag("-G", flags);
145                        writetoFile(re, reDir, testNum);
146               
147                        writeToBash(icgrepScript, 
148                                "./icgrep " + strGen.stringifyVec(flags, " ") + " -f " + reDir + to_string(testNum) + 
149                                " " + strDir + to_string(testNum) + " >> " + icgrepResult + "\n");
150
151
152                        writeToBash(grepScript, 
153                                "grep " + strGen.stringifyVec(gflags, " ") + " -f " + reDir + to_string(testNum) + 
154                                " " + strDir + to_string(testNum) + " >> " + grepResult + "\n");
155
156                       
157                }
158                else if (hasFlag("-e", flags)){
159                        flags = removeFlag("-f", flags);
160                        flags = removeFlag("-e", flags);
161                        gflags = removeFlag("-G", flags);
162                        writeToBash(icgrepScript, 
163                                "./icgrep " + strGen.stringifyVec(flags, " ") + " -e \'" + re + "\' " +
164                                strDir + to_string(testNum) + " >> " + icgrepResult + "\n");
165
166                        writeToBash(grepScript, 
167                                "grep " + strGen.stringifyVec(gflags, " ") + " -e \'" + re + "\' " +
168                                strDir + to_string(testNum) + " >> " + grepResult + "\n");
169
170                }
171                else{
172                        gflags = removeFlag("-G", flags);
173                        writeToBash(icgrepScript, 
174                                "./icgrep " + strGen.stringifyVec(flags, " ") + " \'" + re + "\' " +
175                                strDir + to_string(testNum) + " >> " + icgrepResult + "\n");
176
177                        writeToBash(grepScript, 
178                                "grep " + strGen.stringifyVec(gflags, " ") + " \'" + re + "\' " +
179                                strDir + to_string(testNum) + " >> " + icgrepResult + "\n");
180
181                }
182        }
183        else {
184
185                string icgrepScript = "../icgrep/combine/icgrep-test/pcre/icgrep-bash.sh";
186                string pcreScript = "../icgrep/combine/icgrep-test/pcre/pcre-bash.sh";
187                string icgrepResult = "../icgrep/combine/icgrep-test/pcre/icgrep-result";
188                string pcreResult = "../icgrep/combine/icgrep-test/pcre/pcre-result";
189                vector<string> pflags;
190
191                writeToBash(icgrepScript, "echo \"" + re + "\" >> " + icgrepResult);
192                writeToBash(pcreScript, "echo \"" + re + "\" >> " + pcreResult);
193
194                if (hasFlag("-f", flags)){
195                        flags = removeFlag("-f", flags);
196                        flags = removeFlag("-e", flags);
197                        pflags = removeFlag("-P", flags);
198                        writetoFile(re, reDir, testNum);
199               
200                        writeToBash(icgrepScript, 
201                                "./icgrep " + strGen.stringifyVec(flags, " ") + " -f " + reDir + to_string(testNum) + 
202                                " " + strDir + to_string(testNum) + " >> " + icgrepResult + "\n");
203
204
205                        writeToBash(pcreScript, 
206                                "pcregrep " + strGen.stringifyVec(pflags, " ") + " -f " + reDir + to_string(testNum) + 
207                                " " + strDir + to_string(testNum) + " >> " + pcreResult + "\n");
208                       
209                }
210                else if (hasFlag("-e", flags)){
211                        flags = removeFlag("-f", flags);
212                        flags = removeFlag("-e", flags);
213                        pflags = removeFlag("-P", flags);
214                        writeToBash(icgrepScript, 
215                                "./icgrep " + strGen.stringifyVec(flags, " ") + " -e \'" + re + "\' " +
216                                strDir + to_string(testNum) + " >> " + icgrepResult + "\n");
217
218                        writeToBash(pcreScript, 
219                                "pcregrep " + strGen.stringifyVec(pflags, " ") + " -e \'" + re + "\' " +
220                                strDir + to_string(testNum) + " >> " + pcreResult + "\n");
221                       
222                }
223                else{
224                        pflags = removeFlag("-P", flags);
225                        writeToBash(icgrepScript, 
226                                "./icgrep " + strGen.stringifyVec(flags, " ") + " \'" + re + "\' " +
227                                strDir + to_string(testNum) + " >> " + icgrepResult + "\n");
228
229                        writeToBash(pcreScript, 
230                                "pcregrep " + strGen.stringifyVec(pflags, " ") + " \'" + re + "\' " +
231                                strDir + to_string(testNum) + " >> " + pcreResult + "\n");
232
233                }
234        }
235}
236
237void IcgrepTest::execute(){
238        system("../icgrep/combine/icgrep-test/grep/icgrep-bash.sh");
239        system("../icgrep/combine/icgrep-test/grep/grep-bash.sh");
240        system("../icgrep/combine/icgrep-test/pcre/icgrep-bash.sh");
241        system("../icgrep/combine/icgrep-test/pcre/pcre-bash.sh");
242}
243
244void compareResults(string dir1, string dir2, string testName){
245        io::mapped_file_source f1(dir1);
246    io::mapped_file_source f2(dir2);
247
248    if(    f1.size() == f2.size()
249        && std::equal(f1.data(), f1.data() + f1.size(), f2.data())
250       )
251        std::cout << testName << "test suceeded!\n";
252    else
253        std::cout << testName << "test FAILED!\n";
254}
255
256void IcgrepTest::getResult(){
257
258        compareResults("..//icgrep/combine/icgrep-test/grep/icgrep-result", "..//icgrep/combine/icgrep-test/grep/grep-result", "GNU grep");
259    compareResults("..//icgrep/combine/icgrep-test/pcre/icgrep-result", "..//icgrep/combine/icgrep-test/pcre/pcre-result", "PCRE grep");
260
261    cout << "End of test\n";
262}
263
Note: See TracBrowser for help on using the repository browser.