/** * @file regex_test.cpp * * A simple test for libregex. Run it through: * $ regex_test * or * $ regex_test filename(s) * when no argument is provided "mangled-name" is used, * see it for the input file format * * @remark Copyright 2003 OProfile authors * @remark Read the file COPYING * * @author Philippe Elie */ #include "string_manip.h" #include "op_regex.h" #include <iostream> #include <fstream> #include <cstdlib> using namespace std; static int nr_error = 0; static void do_test(istream& fin) { regular_expression_replace rep; setup_regex(rep, "../stl.pat"); string test, expect, last; bool first = true; while (getline(fin, last)) { last = trim(last); if (last.length() == 0 || last[0] == '#') continue; if (first) { test = last; first = false; } else { expect = last; first = true; string str(test); rep.execute(str); if (str != expect) { cerr << "mistmatch: test, expect, returned\n" << '"' << test << '"' << endl << '"' << expect << '"' << endl << '"' << str << '"' << endl; ++nr_error; } } } if (!first) cerr << "input file ill formed\n"; } int main(int argc, char * argv[]) { try { if (argc > 1) { for (int i = 1; i < argc; ++i) { ifstream fin(argv[i]); do_test(fin); } } else { ifstream fin("mangled-name"); if (!fin) { cerr << "Unable to open input test " << "\"mangled_name\"\n" << endl; exit(EXIT_FAILURE); } do_test(fin); } } catch (bad_regex const & e) { cerr << "bad_regex " << e.what() << endl; return EXIT_FAILURE; } catch (exception const & e) { cerr << "exception: " << e.what() << endl; return EXIT_FAILURE; } return nr_error ? EXIT_FAILURE : EXIT_SUCCESS; }