1 /*
2 *
3 * Copyright (c) 2002
4 * John Maddock
5 *
6 * Use, modification and distribution are subject to the
7 * Boost Software License, Version 1.0. (See accompanying file
8 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 *
10 */
11
12
13 #ifndef REGEX_COMPARISON_HPP
14 #define REGEX_COMPARISON_HPP
15
16 #include <string>
17 #include <list>
18 #include <boost/limits.hpp>
19
20 //
21 // globals:
22 //
23 extern bool time_boost;
24 extern bool time_greta;
25 extern bool time_safe_greta;
26 extern bool time_dynamic_xpressive;
27 extern bool time_static_xpressive;
28 //extern bool time_posix;
29 //extern bool time_pcre;
30
31 extern bool test_matches;
32 extern bool test_short_twain;
33 extern bool test_long_twain;
34
35 extern std::string xml_out_file;
36 extern std::string xml_contents;
37
38
39 int handle_argument(const std::string& what);
40 int show_usage();
41 void load_file(std::string& text, const char* file);
42 void output_xml_results(bool show_description, const std::string& title, const std::string& filename);
43
44 struct results
45 {
46 double boost_time;
47 double greta_time;
48 double safe_greta_time;
49 double dynamic_xpressive_time;
50 double static_xpressive_time;
51 //double posix_time;
52 //double pcre_time;
53 double factor;
54 std::string expression;
55 std::string description;
resultsresults56 results(const std::string& ex, const std::string& desc)
57 : boost_time(-1),
58 greta_time(-1),
59 safe_greta_time(-1),
60 dynamic_xpressive_time(-1),
61 static_xpressive_time(-1),
62 //posix_time(-1),
63 //pcre_time(-1),
64 factor((std::numeric_limits<double>::max)()),
65 expression(ex),
66 description(desc)
67 {}
finaliseresults68 void finalise()
69 {
70 if((boost_time >= 0) && (boost_time < factor))
71 factor = boost_time;
72 if((greta_time >= 0) && (greta_time < factor))
73 factor = greta_time;
74 if((safe_greta_time >= 0) && (safe_greta_time < factor))
75 factor = safe_greta_time;
76 if((dynamic_xpressive_time >= 0) && (dynamic_xpressive_time < factor))
77 factor = dynamic_xpressive_time;
78 if((static_xpressive_time >= 0) && (static_xpressive_time < factor))
79 factor = static_xpressive_time;
80 //if((posix_time >= 0) && (posix_time < factor))
81 // factor = posix_time;
82 //if((pcre_time >= 0) && (pcre_time < factor))
83 // factor = pcre_time;
84 if((factor >= 0) && (factor < factor))
85 factor = factor;
86 }
87 };
88
89 extern std::list<results> result_list;
90
91
92 namespace b {
93 // boost tests:
94 double time_match(const std::string& re, const std::string& text);
95 double time_find_all(const std::string& re, const std::string& text);
96 }
97 //namespace posix {
98 //// posix tests:
99 //double time_match(const std::string& re, const std::string& text);
100 //double time_find_all(const std::string& re, const std::string& text);
101 //
102 //}
103 //namespace pcr {
104 //// pcre tests:
105 //double time_match(const std::string& re, const std::string& text);
106 //double time_find_all(const std::string& re, const std::string& text);
107 //
108 //}
109 namespace g {
110 // greta tests:
111 double time_match(const std::string& re, const std::string& text);
112 double time_find_all(const std::string& re, const std::string& text);
113 }
114 namespace gs {
115 // safe greta tests:
116 double time_match(const std::string& re, const std::string& text);
117 double time_find_all(const std::string& re, const std::string& text);
118 }
119 namespace dxpr {
120 // dynamic xpressive tests:
121 double time_match(const std::string& re, const std::string& text);
122 double time_find_all(const std::string& re, const std::string& text);
123 }
124 namespace sxpr {
125 // static xpressive tests:
126 double time_match(const std::string& re, const std::string& text);
127 double time_find_all(const std::string& re, const std::string& text);
128 }
129 void test_match(const std::string& re, const std::string& text, const std::string& description);
130 void test_find_all(const std::string& re, const std::string& text, const std::string& description);
test_match(const std::string & re,const std::string & text)131 inline void test_match(const std::string& re, const std::string& text)
132 { test_match(re, text, text); }
test_find_all(const std::string & re,const std::string & text)133 inline void test_find_all(const std::string& re, const std::string& text)
134 { test_find_all(re, text, ""); }
135
136
137 #define REPEAT_COUNT 10
138
139 #endif
140