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
26using namespace std;
27
28static int nr_error = 0;
29
30static 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
65int 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