• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * @file regex_test.cpp
3  *
4  * A simple test for libregex. Run it through:
5  * $ regex_test
6  * or
7  * $ regex_test filename(s)
8  * when no argument is provided "mangled-name" is used,
9  * see it for the input file format
10  *
11  * @remark Copyright 2003 OProfile authors
12  * @remark Read the file COPYING
13  *
14  * @author Philippe Elie
15  */
16 
17 #include "string_manip.h"
18 
19 #include "op_regex.h"
20 
21 #include <iostream>
22 #include <fstream>
23 
24 #include <cstdlib>
25 
26 using namespace std;
27 
28 static int nr_error = 0;
29 
do_test(istream & fin)30 static void do_test(istream& fin)
31 {
32 	regular_expression_replace rep;
33 
34 	setup_regex(rep, "../stl.pat");
35 
36 	string test, expect, last;
37 	bool first = true;
38 	while (getline(fin, last)) {
39 		last = trim(last);
40 		if (last.length() == 0 || last[0] == '#')
41 			continue;
42 
43 		if (first) {
44 			test = last;
45 			first = false;
46 		} else {
47 			expect = last;
48 			first = true;
49 			string str(test);
50 			rep.execute(str);
51 			if (str != expect) {
52 				cerr << "mistmatch: test, expect, returned\n"
53 				     << '"' << test << '"' << endl
54 				     << '"' << expect << '"' << endl
55 				     << '"' << str << '"' << endl;
56 				++nr_error;
57 			}
58 		}
59 	}
60 
61 	if (!first)
62 		cerr << "input file ill formed\n";
63 }
64 
main(int argc,char * argv[])65 int main(int argc, char * argv[])
66 {
67 	try {
68 		if (argc > 1) {
69 			for (int i = 1; i < argc; ++i) {
70 				ifstream fin(argv[i]);
71 				do_test(fin);
72 			}
73 		} else {
74 			ifstream fin("mangled-name");
75 			if (!fin) {
76 				cerr << "Unable to open input test "
77 				     << "\"mangled_name\"\n" << endl;
78 				exit(EXIT_FAILURE);
79 			}
80 			do_test(fin);
81 		}
82 	}
83 	catch (bad_regex const & e) {
84 		cerr << "bad_regex " << e.what() << endl;
85 		return EXIT_FAILURE;
86 	}
87 	catch (exception const & e) {
88 		cerr << "exception: " << e.what() << endl;
89 		return EXIT_FAILURE;
90 	}
91 
92 	return nr_error ? EXIT_FAILURE : EXIT_SUCCESS;
93 }
94 
95