blob: ec4f00f97ae852656d58ad3487286c4c457254bb [file] [log] [blame]
/**
* @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;
}