1 ///////////////////////////////////////////////////////////////////////////////
2 // test2.hpp
3 //
4 //  Copyright 2008 Eric Niebler. Distributed under the Boost
5 //  Software License, Version 1.0. (See accompanying file
6 //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 
8 #include "./test.hpp"
9 
10 ///////////////////////////////////////////////////////////////////////////////
11 // get_test_cases
12 //
13 template<typename BidiIterT>
get_test_cases()14 boost::iterator_range<xpr_test_case<BidiIterT> const *> get_test_cases()
15 {
16     typedef typename boost::iterator_value<BidiIterT>::type char_type;
17     typedef xpr_test_case<BidiIterT> xpr_test_case;
18     typedef basic_regex<BidiIterT> regex_type;
19 
20     // "(\\+|-)?([0-9]+\\.?[0-9]*|\\.[0-9]+)([eE](\\+|-)?[0-9]+)?"
21     static regex_type const test21 = !(s1= as_xpr(L('+'))|L('-')) >> (s2= +range(L('0'),L('9')) >> !as_xpr(L('.')) >> *range(L('0'),L('9')) |
22         L('.') >> +range(L('0'),L('9'))) >> !(s3= (set=L('e'),L('E')) >> !(s4= as_xpr(L('+'))|L('-')) >> +range(L('0'),L('9')));
23 
24     // "^(\\+|-)?([0-9]+\\.?[0-9]*|\\.[0-9]+)([eE](\\+|-)?[0-9]+)?$"
25     static regex_type const test23 = bos >> test21 >> eos;
26 
27     static char_type const *nilbr = 0;
28     static xpr_test_case const test_cases[] =
29     {
30         xpr_test_case
31         (
32             "test21"
33           , L("-1234.56789")
34           , test21
35           , backrefs(L("-1234.56789"), L("-"), L("1234.56789"), L(""), L(""), nilbr)
36         )
37       , xpr_test_case
38         (
39             "test22"
40           , L("-1234.56789e-123123123")
41           , test21
42           , backrefs(L("-1234.56789e-123123123"), L("-"), L("1234.56789"), L("e-123123123"), L("-"), nilbr)
43         )
44       , xpr_test_case
45         (
46             "test23"
47           , L("-.1234.56789")
48           , test23
49           , no_match
50         )
51       , xpr_test_case
52         (
53             "test24"
54           , L("-1234.56789e-12312e123")
55           , test23
56           , no_match
57         )
58       , xpr_test_case
59         (
60             "test25"
61           , L("aaaaaaaaac")
62           , regex_type(*as_xpr(L('a')) >> *as_xpr(L('a')) >> *as_xpr(L('a')) >> *as_xpr(L('a')) >> *as_xpr(L('a')) >> L('b'))
63           , no_match
64         )
65       , xpr_test_case
66         (
67             "test26"
68           , L("ThIs iS a TeSt")
69           , regex_type(*set[range(L('a'),L('z')) | range(L('A'),L('Z'))])
70           , backrefs(L("ThIs"), nilbr)
71         )
72       , xpr_test_case
73         (
74             "test27"
75           , L("a^b")
76           , regex_type(L('a') >> bos >> L('b'))
77           , no_match
78         )
79       , xpr_test_case
80         (
81             "test28"
82           , L("a^b")
83           , regex_type(as_xpr(L("a^b")))
84           , backrefs(L("a^b"), nilbr)
85         )
86       , xpr_test_case
87         (
88             "test29"
89           , L("a^b")
90           , regex_type(L('a') >> ~set[L(' ')] >> L('b'))
91           , backrefs(L("a^b"), nilbr)
92         )
93       , xpr_test_case
94         (
95             "test30"
96           , L("a^b")
97           , regex_type(L('a') >> ~set[L('^')] >> L('b'))
98           , no_match
99         )
100       , xpr_test_case
101         (
102             "test31"
103           , L("a^b")
104           , regex_type(L('a') >> ~set[L('^')] >> L('b'))
105           , no_match
106         )
107       , xpr_test_case
108         (
109             "test31.1"
110           , L("a^b")
111           , regex_type(L('a') >> set[L('^')] >> L('b'))
112           , backrefs(L("a^b"), nilbr)
113         )
114       , xpr_test_case
115         (
116             "test32"
117           , L("foobazFOObar")
118           , regex_type(icase(L("foo") >> before(L("bar"))))
119           , backrefs(L("FOO"), nilbr)
120         )
121       , xpr_test_case
122         (
123             "test33"
124           , L("foobarFOObaz")
125           , regex_type(icase(L("foo") >> ~before(L("bar"))))
126           , backrefs(L("FOO"), nilbr)
127         )
128       , xpr_test_case
129         (
130             "test34"
131           , L("foobarFOO")
132           , regex_type(icase(L("foo") >> ~before(L("bar"))))
133           , backrefs(L("FOO"), nilbr)
134         )
135       , xpr_test_case
136         (
137             "test35"
138           , L("foobarFOObarfoo")
139           , regex_type(icase(+(s1= keep(s2= L("foo")) >> L("bar"))))
140           , backrefs(L("foobarFOObar"), L("FOObar"), L("FOO"), nilbr)
141         )
142       , xpr_test_case
143         (
144             "test37"
145           , L("foobar")
146           , regex_type(+(s1= L("bar") | (s2= L("foo"))))
147           , backrefs(L("foobar"), L("bar"), L("foo"), nilbr)
148         )
149       , xpr_test_case
150         (
151             "test38"
152           , L("foobar")
153           , regex_type(+(s1= (s2= L("bar")) | L("foo")))
154           , backrefs(L("foobar"), L("bar"), L("bar"), nilbr)
155         )
156       , xpr_test_case
157         (
158             "test39"
159           , L("foobar")
160           , regex_type(+(s1= L("foo") | (s2= L("bar"))))
161           , backrefs(L("foobar"), L("bar"), L("bar"), nilbr)
162         )
163       , xpr_test_case
164         (
165             "test40"
166           , L("foobar")
167           , regex_type(+(s1= (s2= L("foo")) | L("bar")))
168           , backrefs(L("foobar"), L("bar"), L("foo"), nilbr)
169         )
170     };
171 
172     return boost::make_iterator_range(test_cases);
173 }
174