18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file regex_test.cpp 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * A simple test for libregex. Run it through: 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * $ regex_test 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * or 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * $ regex_test filename(s) 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * when no argument is provided "mangled-name" is used, 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * see it for the input file format 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2003 OProfile authors 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "string_manip.h" 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_regex.h" 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <iostream> 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <fstream> 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <cstdlib> 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddusing namespace std; 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstatic int nr_error = 0; 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstatic void do_test(istream& fin) 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd regular_expression_replace rep; 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd setup_regex(rep, "../stl.pat"); 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd string test, expect, last; 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd bool first = true; 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd while (getline(fin, last)) { 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd last = trim(last); 408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (last.length() == 0 || last[0] == '#') 418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd continue; 428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (first) { 448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd test = last; 458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd first = false; 468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } else { 478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd expect = last; 488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd first = true; 498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd string str(test); 508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd rep.execute(str); 518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (str != expect) { 528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "mistmatch: test, expect, returned\n" 538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd << '"' << test << '"' << endl 548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd << '"' << expect << '"' << endl 558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd << '"' << str << '"' << endl; 568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ++nr_error; 578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (!first) 628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "input file ill formed\n"; 638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddint main(int argc, char * argv[]) 668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd try { 688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (argc > 1) { 698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd for (int i = 1; i < argc; ++i) { 708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ifstream fin(argv[i]); 718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_test(fin); 728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } else { 748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ifstream fin("mangled-name"); 758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (!fin) { 768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "Unable to open input test " 778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd << "\"mangled_name\"\n" << endl; 788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit(EXIT_FAILURE); 798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_test(fin); 818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd catch (bad_regex const & e) { 848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "bad_regex " << e.what() << endl; 858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return EXIT_FAILURE; 868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd catch (exception const & e) { 888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "exception: " << e.what() << endl; 898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return EXIT_FAILURE; 908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return nr_error ? EXIT_FAILURE : EXIT_SUCCESS; 938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 95