]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/regex/test/regress/basic_tests.cpp
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)
13 * LOCATION: see http://www.boost.org for most recent version.
14 * FILE basic_tests.cpp
15 * VERSION see <boost/version.hpp>
16 * DESCRIPTION: main regex test declarations.
19 #include <boost/detail/workaround.hpp>
21 #if BOOST_WORKAROUND(__BORLANDC__, < 0x560)
22 // we get unresolved externals from basic_string
23 // unless we do this, a well known Borland bug:
24 #define _RWSTD_COMPILE_INSTANTIATE
30 #pragma warning(disable:4127)
35 using namespace boost::regex_constants
;
36 TEST_REGEX_SEARCH("a", basic
, "a", match_default
, make_array(0, 1, -2, -2));
37 TEST_REGEX_SEARCH("a", basic
, "bba", match_default
, make_array(2, 3, -2, -2));
38 TEST_REGEX_SEARCH("Z", perl
, "aaa", match_default
, make_array(-2, -2));
39 TEST_REGEX_SEARCH("Z", perl
, "xxxxZZxxx", match_default
, make_array(4, 5, -2, 5, 6, -2, -2));
40 // and some simple brackets:
41 TEST_REGEX_SEARCH("(a)", perl
, "zzzaazz", match_default
, make_array(3, 4, 3, 4, -2, 4, 5, 4, 5, -2, -2));
42 TEST_REGEX_SEARCH("()", perl
, "zzz", match_default
, make_array(0, 0, 0, 0, -2, 1, 1, 1, 1, -2, 2, 2, 2, 2, -2, 3, 3, 3, 3, -2, -2));
43 TEST_REGEX_SEARCH("()", perl
, "", match_default
, make_array(0, 0, 0, 0, -2, -2));
44 TEST_INVALID_REGEX("(", perl
);
45 TEST_INVALID_REGEX("", perl
|no_empty_expressions
);
46 TEST_REGEX_SEARCH("", perl
, "abc", match_default
, make_array(0, 0, -2, 1, 1, -2, 2, 2, -2, 3, 3, -2, -2));
47 TEST_INVALID_REGEX(")", perl
);
48 TEST_INVALID_REGEX("(aa", perl
);
49 TEST_INVALID_REGEX("aa)", perl
);
50 TEST_REGEX_SEARCH("a", perl
, "b", match_default
, make_array(-2, -2));
51 TEST_REGEX_SEARCH("\\(\\)", perl
, "()", match_default
, make_array(0, 2, -2, -2));
52 TEST_REGEX_SEARCH("\\(a\\)", perl
, "(a)", match_default
, make_array(0, 3, -2, -2));
53 TEST_INVALID_REGEX("\\()", perl
);
54 TEST_INVALID_REGEX("(\\)", perl
);
55 TEST_REGEX_SEARCH("p(a)rameter", perl
, "ABCparameterXYZ", match_default
, make_array(3, 12, 4, 5, -2, -2));
56 TEST_REGEX_SEARCH("[pq](a)rameter", perl
, "ABCparameterXYZ", match_default
, make_array(3, 12, 4, 5, -2, -2));
58 // now try escaped brackets:
59 TEST_REGEX_SEARCH("\\(a\\)", basic
, "zzzaazz", match_default
, make_array(3, 4, 3, 4, -2, 4, 5, 4, 5, -2, -2));
60 TEST_REGEX_SEARCH("\\(\\)", basic
, "zzz", match_default
, make_array(0, 0, 0, 0, -2, 1, 1, 1, 1, -2, 2, 2, 2, 2, -2, 3, 3, 3, 3, -2, -2));
61 TEST_REGEX_SEARCH("\\(\\)", basic
, "", match_default
, make_array(0, 0, 0, 0, -2, -2));
62 TEST_INVALID_REGEX("\\(", basic
);
63 TEST_INVALID_REGEX("\\)", basic
);
64 TEST_INVALID_REGEX("\\", basic
);
65 TEST_INVALID_REGEX("\\(aa", basic
);
66 TEST_INVALID_REGEX("aa\\)", basic
);
67 TEST_REGEX_SEARCH("()", basic
, "()", match_default
, make_array(0, 2, -2, -2));
68 TEST_REGEX_SEARCH("(a)", basic
, "(a)", match_default
, make_array(0, 3, -2, -2));
69 TEST_INVALID_REGEX("\\()", basic
);
70 TEST_INVALID_REGEX("(\\)", basic
);
71 TEST_REGEX_SEARCH("p\\(a\\)rameter", basic
, "ABCparameterXYZ", match_default
, make_array(3, 12, 4, 5, -2, -2));
72 TEST_REGEX_SEARCH("[pq]\\(a\\)rameter", basic
, "ABCparameterXYZ", match_default
, make_array(3, 12, 4, 5, -2, -2));
74 // now move on to "." wildcards
75 TEST_REGEX_SEARCH(".", perl
, "a", match_default
, make_array(0, 1, -2, -2));
76 TEST_REGEX_SEARCH(".", perl
, "\n", match_default
, make_array(0, 1, -2, -2));
77 TEST_REGEX_SEARCH(".", perl
, "\r", match_default
, make_array(0, 1, -2, -2));
78 TEST_REGEX_SEARCH(".", perl
, "\0", match_default
, make_array(0, 1, -2, -2));
79 TEST_REGEX_SEARCH(".", perl
, "a", match_not_dot_newline
, make_array(0, 1, -2, -2));
80 TEST_REGEX_SEARCH(".", perl
, "\n", match_not_dot_newline
, make_array(-2, -2));
81 TEST_REGEX_SEARCH(".", perl
, "\r", match_not_dot_newline
, make_array(-2, -2));
82 TEST_REGEX_SEARCH(".", perl
, "\0", match_not_dot_newline
, make_array(0, 1, -2, -2));
83 TEST_REGEX_SEARCH(".", perl
, "\n", match_not_dot_null
| match_not_dot_newline
, make_array(-2, -2));
84 TEST_REGEX_SEARCH(".", perl
, "\r", match_not_dot_null
| match_not_dot_newline
, make_array(-2, -2));
85 TEST_REGEX_SEARCH(".", perl
, "\0", match_not_dot_null
| match_not_dot_newline
, make_array(-2, -2));
86 TEST_REGEX_SEARCH(".", basic
, "a", match_default
, make_array(0, 1, -2, -2));
87 TEST_REGEX_SEARCH(".", basic
, "\n", match_default
, make_array(0, 1, -2, -2));
88 TEST_REGEX_SEARCH(".", basic
, "\r", match_default
, make_array(0, 1, -2, -2));
89 TEST_REGEX_SEARCH(".", basic
, "\0", match_default
, make_array(0, 1, -2, -2));
90 TEST_REGEX_SEARCH(".", basic
, "a", match_not_dot_newline
, make_array(0, 1, -2, -2));
91 TEST_REGEX_SEARCH(".", basic
, "\n", match_not_dot_newline
, make_array(-2, -2));
92 TEST_REGEX_SEARCH(".", basic
, "\r", match_not_dot_newline
, make_array(-2, -2));
93 TEST_REGEX_SEARCH(".", basic
, "\0", match_not_dot_newline
, make_array(0, 1, -2, -2));
94 TEST_REGEX_SEARCH(".", basic
, "\n", match_not_dot_null
| match_not_dot_newline
, make_array(-2, -2));
95 TEST_REGEX_SEARCH(".", basic
, "\r", match_not_dot_null
| match_not_dot_newline
, make_array(-2, -2));
96 TEST_REGEX_SEARCH(".", basic
, "\0", match_not_dot_null
| match_not_dot_newline
, make_array(-2, -2));
99 void test_non_marking_paren()
101 using namespace boost::regex_constants
;
103 // non-marking parenthesis added 25/04/00
105 TEST_REGEX_SEARCH("(?:abc)+", perl
, "xxabcabcxx", match_default
, make_array(2, 8, -2, -2));
106 TEST_REGEX_SEARCH("(?:a+)(b+)", perl
, "xaaabbbx", match_default
, make_array(1, 7, 4, 7, -2, -2));
107 TEST_REGEX_SEARCH("(a+)(?:b+)", perl
, "xaaabbba", match_default
, make_array(1, 7, 1, 4, -2, -2));
108 TEST_REGEX_SEARCH("(?:(a+)b+)", perl
, "xaaabbba", match_default
, make_array(1, 7, 1, 4, -2, -2));
109 TEST_REGEX_SEARCH("(?:a+(b+))", perl
, "xaaabbba", match_default
, make_array(1, 7, 4, 7, -2, -2));
110 TEST_REGEX_SEARCH("a+(?#b+)b+", perl
, "xaaabbba", match_default
, make_array(1, 7, -2, -2));
111 TEST_REGEX_SEARCH("(a)(?:b|$)", perl
, "ab", match_default
, make_array(0, 2, 0, 1, -2, -2));
112 TEST_REGEX_SEARCH("(a)(?:b|$)", perl
, "a", match_default
, make_array(0, 1, 0, 1, -2, -2));
115 void test_partial_match()
117 using namespace boost::regex_constants
;
119 // try some partial matches:
121 TEST_REGEX_SEARCH("(xyz)(.*)abc", perl
, "xyzaaab", match_default
|match_partial
, make_array(0, 7, -2, -2));
122 TEST_REGEX_SEARCH("(xyz)(.*)abc", perl
, "xyz", match_default
|match_partial
, make_array(0, 3, -2, -2));
123 TEST_REGEX_SEARCH("(xyz)(.*)abc", perl
, "xy", match_default
|match_partial
, make_array(0, 2, -2, -2));
124 TEST_REGEX_SEARCH("(xyz)(.*)abc", perl
, "x", match_default
|match_partial
, make_array(0, 1, -2, -2));
125 TEST_REGEX_SEARCH("(xyz)(.*)abc", perl
, "", match_default
|match_partial
, make_array(-2, -2));
126 TEST_REGEX_SEARCH("(xyz)(.*)abc", perl
, "aaaa", match_default
|match_partial
, make_array(-2, -2));
127 TEST_REGEX_SEARCH(".abc", perl
, "aaab", match_default
|match_partial
, make_array(1, 4, -2, -2));
128 TEST_REGEX_SEARCH("a[_]", perl
, "xxa", match_default
|match_partial
, make_array(2, 3, -2, -2));
129 TEST_REGEX_SEARCH(".{4,}", perl
, "xxa", match_default
|match_partial
, make_array(0, 3, -2, -2));
130 TEST_REGEX_SEARCH(".{4,}", perl
, "xxa", match_default
|match_partial
|match_not_dot_null
, make_array(0, 3, -2, -2));
131 TEST_REGEX_SEARCH("[\\x0-\\xff]{4,}", perl
, "xxa", match_default
|match_partial
, make_array(0, 3, -2, -2));
132 TEST_REGEX_SEARCH("a{4,}", perl
, "aaa", match_default
|match_partial
, make_array(0, 3, -2, -2));
133 TEST_REGEX_SEARCH("\\w{4,}", perl
, "aaa", match_default
|match_partial
, make_array(0, 3, -2, -2));
134 TEST_REGEX_SEARCH(".*?<tag>", perl
, "aaa", match_default
|match_partial
, make_array(0, 3, -2, -2));
135 TEST_REGEX_SEARCH("a*?<tag>", perl
, "aaa", match_default
|match_partial
, make_array(0, 3, -2, -2));
136 TEST_REGEX_SEARCH("\\w*?<tag>", perl
, "aaa", match_default
|match_partial
, make_array(0, 3, -2, -2));
137 TEST_REGEX_SEARCH("(\\w)*?<tag>", perl
, "aaa", match_default
|match_partial
, make_array(0, 3, -2, -2));
139 TEST_REGEX_SEARCH("(xyz)(.*)abc", boost::regex::extended
, "xyzaaab", match_default
|match_partial
, make_array(0, 7, -2, -2));
140 TEST_REGEX_SEARCH("(xyz)(.*)abc", boost::regex::extended
, "xyz", match_default
|match_partial
, make_array(0, 3, -2, -2));
141 TEST_REGEX_SEARCH("(xyz)(.*)abc", boost::regex::extended
, "xy", match_default
|match_partial
, make_array(0, 2, -2, -2));
142 TEST_REGEX_SEARCH("(xyz)(.*)abc", boost::regex::extended
, "x", match_default
|match_partial
, make_array(0, 1, -2, -2));
143 TEST_REGEX_SEARCH("(xyz)(.*)abc", boost::regex::extended
, "", match_default
|match_partial
, make_array(-2, -2));
144 TEST_REGEX_SEARCH("(xyz)(.*)abc", boost::regex::extended
, "aaaa", match_default
|match_partial
, make_array(-2, -2));
145 TEST_REGEX_SEARCH(".abc", boost::regex::extended
, "aaab", match_default
|match_partial
, make_array(1, 4, -2, -2));
146 TEST_REGEX_SEARCH("a[_]", boost::regex::extended
, "xxa", match_default
|match_partial
, make_array(2, 3, -2, -2));
147 TEST_REGEX_SEARCH(".{4,}", boost::regex::extended
, "xxa", match_default
|match_partial
, make_array(0, 3, -2, -2));
148 TEST_REGEX_SEARCH(".{4,}", boost::regex::extended
, "xxa", match_default
|match_partial
|match_not_dot_null
, make_array(0, 3, -2, -2));
153 using namespace boost::regex_constants
;
154 // subtleties of matching with no sub-expressions marked
155 TEST_REGEX_SEARCH("a(b?c)+d", perl
, "accd", match_default
|match_nosubs
, make_array(0, 4, -2, -2));
156 TEST_REGEX_SEARCH("(wee|week)(knights|night)", perl
, "weeknights", match_default
|match_nosubs
, make_array(0, 10, -2, -2));
157 TEST_REGEX_SEARCH(".*", perl
, "abc", match_default
|match_nosubs
, make_array(0, 3, -2, 3, 3, -2, -2));
158 TEST_REGEX_SEARCH("a(b|(c))d", perl
, "abd", match_default
|match_nosubs
, make_array(0, 3, -2, -2));
159 TEST_REGEX_SEARCH("a(b|(c))d", perl
, "acd", match_default
|match_nosubs
, make_array(0, 3, -2, -2));
160 TEST_REGEX_SEARCH("a(b*|c|e)d", perl
, "abbd", match_default
|match_nosubs
, make_array(0, 4, -2, -2));
162 TEST_REGEX_SEARCH("a(b*|c|e)d", perl
, "acd", match_default
|match_nosubs
, make_array(0, 3, -2, -2));
163 TEST_REGEX_SEARCH("a(b*|c|e)d", perl
, "ad", match_default
|match_nosubs
, make_array(0, 2, -2, -2));
164 TEST_REGEX_SEARCH("a(b?)c", perl
, "abc", match_default
|match_nosubs
, make_array(0, 3, -2, -2));
165 TEST_REGEX_SEARCH("a(b?)c", perl
, "ac", match_default
|match_nosubs
, make_array(0, 2, -2, -2));
166 TEST_REGEX_SEARCH("a(b+)c", perl
, "abc", match_default
|match_nosubs
, make_array(0, 3, -2, -2));
167 TEST_REGEX_SEARCH("a(b+)c", perl
, "abbbc", match_default
|match_nosubs
, make_array(0, 5, -2, -2));
168 TEST_REGEX_SEARCH("a(b*)c", perl
, "ac", match_default
|match_nosubs
, make_array(0, 2, -2, -2));
169 TEST_REGEX_SEARCH("(a|ab)(bc([de]+)f|cde)", perl
, "abcdef", match_default
|match_nosubs
, make_array(0, 6, -2, -2));
170 TEST_REGEX_SEARCH("a([bc]?)c", perl
, "abc", match_default
|match_nosubs
, make_array(0, 3, -2, -2));
171 TEST_REGEX_SEARCH("a([bc]?)c", perl
, "ac", match_default
|match_nosubs
, make_array(0, 2, -2, -2));
173 TEST_REGEX_SEARCH("a([bc]+)c", perl
, "abc", match_default
|match_nosubs
, make_array(0, 3, -2, -2));
174 TEST_REGEX_SEARCH("a([bc]+)c", perl
, "abcc", match_default
|match_nosubs
, make_array(0, 4, -2, -2));
175 TEST_REGEX_SEARCH("a([bc]+)bc", perl
, "abcbc", match_default
|match_nosubs
, make_array(0, 5, -2, -2));
176 TEST_REGEX_SEARCH("a(bb+|b)b", perl
, "abb", match_default
|match_nosubs
, make_array(0, 3, -2, -2));
177 TEST_REGEX_SEARCH("a(bbb+|bb+|b)b", perl
, "abb", match_default
|match_nosubs
, make_array(0, 3, -2, -2));
178 TEST_REGEX_SEARCH("a(bbb+|bb+|b)b", perl
, "abbb", match_default
|match_nosubs
, make_array(0, 4, -2, -2));
179 TEST_REGEX_SEARCH("a(bbb+|bb+|b)bb", perl
, "abbb", match_default
|match_nosubs
, make_array(0, 4, -2, -2));
180 TEST_REGEX_SEARCH("(.*).*", perl
, "abcdef", match_default
|match_nosubs
, make_array(0, 6, -2, 6, 6, -2, -2));
181 TEST_REGEX_SEARCH("(a*)*", perl
, "bc", match_default
|match_nosubs
, make_array(0, 0, -2, 1, 1, -2, 2, 2, -2, -2));
183 TEST_REGEX_SEARCH("a(b?c)+d", perl
|nosubs
, "accd", match_default
, make_array(0, 4, -2, -2));
184 TEST_REGEX_SEARCH("(wee|week)(knights|night)", perl
|nosubs
, "weeknights", match_default
, make_array(0, 10, -2, -2));
185 TEST_REGEX_SEARCH(".*", perl
|nosubs
, "abc", match_default
, make_array(0, 3, -2, 3, 3, -2, -2));
186 TEST_REGEX_SEARCH("a(b|(c))d", perl
|nosubs
, "abd", match_default
, make_array(0, 3, -2, -2));
187 TEST_REGEX_SEARCH("a(b|(c))d", perl
|nosubs
, "acd", match_default
, make_array(0, 3, -2, -2));
188 TEST_REGEX_SEARCH("a(b*|c|e)d", perl
|nosubs
, "abbd", match_default
, make_array(0, 4, -2, -2));
190 TEST_REGEX_SEARCH("a(b*|c|e)d", perl
|nosubs
, "acd", match_default
, make_array(0, 3, -2, -2));
191 TEST_REGEX_SEARCH("a(b*|c|e)d", perl
|nosubs
, "ad", match_default
, make_array(0, 2, -2, -2));
192 TEST_REGEX_SEARCH("a(b?)c", perl
|nosubs
, "abc", match_default
, make_array(0, 3, -2, -2));
193 TEST_REGEX_SEARCH("a(b?)c", perl
|nosubs
, "ac", match_default
, make_array(0, 2, -2, -2));
194 TEST_REGEX_SEARCH("a(b+)c", perl
|nosubs
, "abc", match_default
, make_array(0, 3, -2, -2));
195 TEST_REGEX_SEARCH("a(b+)c", perl
|nosubs
, "abbbc", match_default
, make_array(0, 5, -2, -2));
196 TEST_REGEX_SEARCH("a(b*)c", perl
|nosubs
, "ac", match_default
, make_array(0, 2, -2, -2));
197 TEST_REGEX_SEARCH("(a|ab)(bc([de]+)f|cde)", perl
|nosubs
, "abcdef", match_default
, make_array(0, 6, -2, -2));
198 TEST_REGEX_SEARCH("a([bc]?)c", perl
|nosubs
, "abc", match_default
, make_array(0, 3, -2, -2));
199 TEST_REGEX_SEARCH("a([bc]?)c", perl
|nosubs
, "ac", match_default
, make_array(0, 2, -2, -2));
201 TEST_REGEX_SEARCH("a([bc]+)c", perl
|nosubs
, "abc", match_default
, make_array(0, 3, -2, -2));
202 TEST_REGEX_SEARCH("a([bc]+)c", perl
|nosubs
, "abcc", match_default
, make_array(0, 4, -2, -2));
203 TEST_REGEX_SEARCH("a([bc]+)bc", perl
|nosubs
, "abcbc", match_default
, make_array(0, 5, -2, -2));
204 TEST_REGEX_SEARCH("a(bb+|b)b", perl
|nosubs
, "abb", match_default
, make_array(0, 3, -2, -2));
205 TEST_REGEX_SEARCH("a(bbb+|bb+|b)b", perl
|nosubs
, "abb", match_default
, make_array(0, 3, -2, -2));
206 TEST_REGEX_SEARCH("a(bbb+|bb+|b)b", perl
|nosubs
, "abbb", match_default
, make_array(0, 4, -2, -2));
207 TEST_REGEX_SEARCH("a(bbb+|bb+|b)bb", perl
|nosubs
, "abbb", match_default
, make_array(0, 4, -2, -2));
208 TEST_REGEX_SEARCH("(.*).*", perl
|nosubs
, "abcdef", match_default
, make_array(0, 6, -2, 6, 6, -2, -2));
209 TEST_REGEX_SEARCH("(a*)*", perl
|nosubs
, "bc", match_default
, make_array(0, 0, -2, 1, 1, -2, 2, 2, -2, -2));