]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/regex/test/regress/test_sets.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)
15 #pragma warning(disable:4127)
20 using namespace boost::regex_constants
;
21 // now test the set operator []
22 TEST_REGEX_SEARCH("[abc]", boost::regex::extended
, "a", match_default
, make_array(0, 1, -2, -2));
23 TEST_REGEX_SEARCH("[abc]", boost::regex::extended
, "b", match_default
, make_array(0, 1, -2, -2));
24 TEST_REGEX_SEARCH("[abc]", boost::regex::extended
, "c", match_default
, make_array(0, 1, -2, -2));
25 TEST_REGEX_SEARCH("[abc]", boost::regex::extended
, "d", match_default
, make_array(-2, -2));
26 TEST_REGEX_SEARCH("[^bcd]", boost::regex::extended
, "a", match_default
, make_array(0, 1, -2, -2));
27 TEST_REGEX_SEARCH("[^bcd]", boost::regex::extended
, "b", match_default
, make_array(-2, -2));
28 TEST_REGEX_SEARCH("[^bcd]", boost::regex::extended
, "d", match_default
, make_array(-2, -2));
29 TEST_REGEX_SEARCH("[^bcd]", boost::regex::extended
, "e", match_default
, make_array(0, 1, -2, -2));
30 TEST_REGEX_SEARCH("a[b]c", boost::regex::extended
, "abc", match_default
, make_array(0, 3, -2, -2));
31 TEST_REGEX_SEARCH("a[ab]c", boost::regex::extended
, "abc", match_default
, make_array(0, 3, -2, -2));
32 TEST_REGEX_SEARCH("a[a^b]*c", boost::regex::extended
, "aba^c", match_default
, make_array(0, 5, -2, -2));
33 TEST_REGEX_SEARCH("a[^ab]c", boost::regex::extended
, "adc", match_default
, make_array(0, 3, -2, -2));
34 TEST_REGEX_SEARCH("a[]b]c", boost::regex::extended
, "a]c", match_default
, make_array(0, 3, -2, -2));
35 TEST_REGEX_SEARCH("a[[b]c", boost::regex::extended
, "a[c", match_default
, make_array(0, 3, -2, -2));
36 TEST_REGEX_SEARCH("a[-b]c", boost::regex::extended
, "a-c", match_default
, make_array(0, 3, -2, -2));
37 TEST_REGEX_SEARCH("a[^]b]c", boost::regex::extended
, "adc", match_default
, make_array(0, 3, -2, -2));
38 TEST_REGEX_SEARCH("a[^-b]c", boost::regex::extended
, "adc", match_default
, make_array(0, 3, -2, -2));
39 TEST_REGEX_SEARCH("a[b-]c", boost::regex::extended
, "a-c", match_default
, make_array(0, 3, -2, -2));
40 TEST_REGEX_SEARCH("a[a-z-]c", boost::regex::extended
, "a-c", match_default
, make_array(0, 3, -2, -2));
41 TEST_REGEX_SEARCH("a[a-z-]+c", boost::regex::extended
, "aaz-c", match_default
, make_array(0, 5, -2, -2));
42 TEST_INVALID_REGEX("a[b", boost::regex::extended
);
43 TEST_INVALID_REGEX("a[", boost::regex::extended
);
44 TEST_INVALID_REGEX("a[]", boost::regex::extended
);
47 TEST_REGEX_SEARCH("[b-e]", boost::regex::extended
, "a", match_default
, make_array(-2, -2));
48 TEST_REGEX_SEARCH("[b-e]", boost::regex::extended
, "b", match_default
, make_array(0, 1, -2, -2));
49 TEST_REGEX_SEARCH("[b-e]", boost::regex::extended
, "e", match_default
, make_array(0, 1, -2, -2));
50 TEST_REGEX_SEARCH("[b-e]", boost::regex::extended
, "f", match_default
, make_array(-2, -2));
51 TEST_REGEX_SEARCH("[^b-e]", boost::regex::extended
, "a", match_default
, make_array(0, 1, -2, -2));
52 TEST_REGEX_SEARCH("[^b-e]", boost::regex::extended
, "b", match_default
, make_array(-2, -2));
53 TEST_REGEX_SEARCH("[^b-e]", boost::regex::extended
, "e", match_default
, make_array(-2, -2));
54 TEST_REGEX_SEARCH("[^b-e]", boost::regex::extended
, "f", match_default
, make_array(0, 1, -2, -2));
55 TEST_REGEX_SEARCH("a[1-3]c", boost::regex::extended
, "a2c", match_default
, make_array(0, 3, -2, -2));
56 TEST_REGEX_SEARCH("a[-3]c", boost::regex::extended
, "a-c", match_default
, make_array(0, 3, -2, -2));
57 TEST_REGEX_SEARCH("a[-3]c", boost::regex::extended
, "a3c", match_default
, make_array(0, 3, -2, -2));
58 TEST_REGEX_SEARCH("a[^-3]c", boost::regex::extended
, "a-c", match_default
, make_array(-2, -2));
59 TEST_REGEX_SEARCH("a[^-3]c", boost::regex::extended
, "a3c", match_default
, make_array(-2, -2));
60 TEST_REGEX_SEARCH("a[^-3]c", boost::regex::extended
, "axc", match_default
, make_array(0, 3, -2, -2));
61 TEST_INVALID_REGEX("a[3-1]c", boost::regex::extended
& ~::boost::regex_constants::collate
);
62 TEST_INVALID_REGEX("a[1-3-5]c", boost::regex::extended
);
63 TEST_INVALID_REGEX("a[1-", boost::regex::extended
);
64 TEST_INVALID_REGEX("a[\\9]", perl
);
67 TEST_REGEX_SEARCH("a[[:alpha:]]c", boost::regex::extended
, "abc", match_default
, make_array(0, 3, -2, -2));
68 TEST_INVALID_REGEX("a[[:unknown:]]c", boost::regex::extended
);
69 TEST_INVALID_REGEX("a[[", boost::regex::extended
);
70 TEST_INVALID_REGEX("a[[:", boost::regex::extended
);
71 TEST_INVALID_REGEX("a[[:a", boost::regex::extended
);
72 TEST_INVALID_REGEX("a[[:alpha", boost::regex::extended
);
73 TEST_INVALID_REGEX("a[[:alpha:", boost::regex::extended
);
74 TEST_INVALID_REGEX("a[[:alpha:]", boost::regex::extended
);
75 TEST_INVALID_REGEX("a[[:alpha:!", boost::regex::extended
);
76 TEST_INVALID_REGEX("a[[:alpha,:]", boost::regex::extended
);
77 TEST_INVALID_REGEX("a[[:]:]]b", boost::regex::extended
);
78 TEST_INVALID_REGEX("a[[:-:]]b", boost::regex::extended
);
79 TEST_INVALID_REGEX("a[[:alph:]]", boost::regex::extended
);
80 TEST_INVALID_REGEX("a[[:alphabet:]]", boost::regex::extended
);
81 TEST_REGEX_SEARCH("[[:alnum:]]+", boost::regex::extended
, "-%@a0X_-", match_default
, make_array(3, 6, -2, -2));
82 TEST_REGEX_SEARCH("[[:alpha:]]+", boost::regex::extended
, " -%@aX_0-", match_default
, make_array(4, 6, -2, -2));
83 TEST_REGEX_SEARCH("[[:blank:]]+", boost::regex::extended
, "a \tb", match_default
, make_array(1, 4, -2, -2));
84 TEST_REGEX_SEARCH("[[:cntrl:]]+", boost::regex::extended
, " a\n\tb", match_default
, make_array(2, 4, -2, -2));
85 TEST_REGEX_SEARCH("[[:digit:]]+", boost::regex::extended
, "a019b", match_default
, make_array(1, 4, -2, -2));
86 TEST_REGEX_SEARCH("[[:graph:]]+", boost::regex::extended
, " a%b ", match_default
, make_array(1, 4, -2, -2));
87 TEST_REGEX_SEARCH("[[:lower:]]+", boost::regex::extended
, "AabC", match_default
, make_array(1, 3, -2, -2));
88 TEST_REGEX_SEARCH("[[:print:]]+", boost::regex::extended
, "AabC", match_default
, make_array(0, 4, -2, -2));
89 TEST_REGEX_SEARCH("[[:punct:]]+", boost::regex::extended
, " %-&\t", match_default
, make_array(1, 4, -2, -2));
90 TEST_REGEX_SEARCH("[[:space:]]+", boost::regex::extended
, "a \n\t\rb", match_default
, make_array(1, 5, -2, -2));
91 TEST_REGEX_SEARCH("[[:upper:]]+", boost::regex::extended
, "aBCd", match_default
, make_array(1, 3, -2, -2));
92 TEST_REGEX_SEARCH("[[:xdigit:]]+", boost::regex::extended
, "p0f3Cx", match_default
, make_array(1, 5, -2, -2));
93 TEST_REGEX_SEARCH("[\\d]+", perl
, "a019b", match_default
, make_array(1, 4, -2, -2));
96 // escapes are supported in character classes if we have either
97 // perl or awk regular expressions:
99 TEST_REGEX_SEARCH("[\\n]", perl
, "\n", match_default
, make_array(0, 1, -2, -2));
100 TEST_REGEX_SEARCH("[\\b]", perl
, "\b", match_default
, make_array(0, 1, -2, -2));
101 TEST_REGEX_SEARCH("[\\n]", basic
, "\n", match_default
, make_array(-2, -2));
102 TEST_REGEX_SEARCH("[\\n]", basic
, "\\", match_default
, make_array(0, 1, -2, -2));
103 TEST_REGEX_SEARCH("[[:class:]", basic
|no_char_classes
, ":", match_default
, make_array(0, 1, -2, -2));
104 TEST_REGEX_SEARCH("[[:class:]", basic
|no_char_classes
, "[", match_default
, make_array(0, 1, -2, -2));
105 TEST_REGEX_SEARCH("[[:class:]", basic
|no_char_classes
, "c", match_default
, make_array(0, 1, -2, -2));
107 // test single character escapes:
109 TEST_REGEX_SEARCH("\\w", perl
, "A", match_default
, make_array(0, 1, -2, -2));
110 TEST_REGEX_SEARCH("\\w", perl
, "Z", match_default
, make_array(0, 1, -2, -2));
111 TEST_REGEX_SEARCH("\\w", perl
, "a", match_default
, make_array(0, 1, -2, -2));
112 TEST_REGEX_SEARCH("\\w", perl
, "z", match_default
, make_array(0, 1, -2, -2));
113 TEST_REGEX_SEARCH("\\w", perl
, "_", match_default
, make_array(0, 1, -2, -2));
114 TEST_REGEX_SEARCH("\\w", perl
, "}", match_default
, make_array(-2, -2));
115 TEST_REGEX_SEARCH("\\w", perl
, "`", match_default
, make_array(-2, -2));
116 TEST_REGEX_SEARCH("\\w", perl
, "[", match_default
, make_array(-2, -2));
117 TEST_REGEX_SEARCH("\\w", perl
, "@", match_default
, make_array(-2, -2));
118 TEST_REGEX_SEARCH("\\W", perl
, "a", match_default
, make_array(-2, -2));
119 TEST_REGEX_SEARCH("\\W", perl
, "z", match_default
, make_array(-2, -2));
120 TEST_REGEX_SEARCH("\\W", perl
, "A", match_default
, make_array(-2, -2));
121 TEST_REGEX_SEARCH("\\W", perl
, "Z", match_default
, make_array(-2, -2));
122 TEST_REGEX_SEARCH("\\W", perl
, "_", match_default
, make_array(-2, -2));
123 TEST_REGEX_SEARCH("\\W", perl
, "}", match_default
, make_array(0, 1, -2, -2));
124 TEST_REGEX_SEARCH("\\W", perl
, "`", match_default
, make_array(0, 1, -2, -2));
125 TEST_REGEX_SEARCH("\\W", perl
, "[", match_default
, make_array(0, 1, -2, -2));
126 TEST_REGEX_SEARCH("\\W", perl
, "@", match_default
, make_array(0, 1, -2, -2));
128 TEST_REGEX_SEARCH("[[:lower:]]", perl
|icase
, "A", match_default
, make_array(0, 1, -2, -2));
129 TEST_REGEX_SEARCH("[[:upper:]]", perl
|icase
, "A", match_default
, make_array(0, 1, -2, -2));
130 TEST_REGEX_SEARCH("[[:alpha:]]", perl
|icase
, "A", match_default
, make_array(0, 1, -2, -2));
131 TEST_REGEX_SEARCH("[[:alnum:]]", perl
|icase
, "A", match_default
, make_array(0, 1, -2, -2));
132 TEST_REGEX_SEARCH("[[:lower:]]", perl
|icase
, "a", match_default
, make_array(0, 1, -2, -2));
133 TEST_REGEX_SEARCH("[[:upper:]]", perl
|icase
, "a", match_default
, make_array(0, 1, -2, -2));
134 TEST_REGEX_SEARCH("[[:alpha:]]", perl
|icase
, "a", match_default
, make_array(0, 1, -2, -2));
135 TEST_REGEX_SEARCH("[[:alnum:]]", perl
|icase
, "a", match_default
, make_array(0, 1, -2, -2));
136 TEST_REGEX_SEARCH("[[:lower:][:upper:]]", perl
, "A", match_default
, make_array(0, 1, -2, -2));
137 TEST_REGEX_SEARCH("[[:lower:][:upper:]]", perl
, "a", match_default
, make_array(0, 1, -2, -2));
138 TEST_REGEX_SEARCH("[[:lower:][:alpha:]]", perl
, "A", match_default
, make_array(0, 1, -2, -2));
139 TEST_REGEX_SEARCH("[[:lower:][:alpha:]]", perl
, "a", match_default
, make_array(0, 1, -2, -2));
147 using namespace boost::regex_constants
;
148 // collating elements
149 TEST_REGEX_SEARCH("[[.zero.]]", perl
, "0", match_default
, make_array(0, 1, -2, -2));
150 TEST_REGEX_SEARCH("[[.one.]]", perl
, "1", match_default
, make_array(0, 1, -2, -2));
151 TEST_REGEX_SEARCH("[[.two.]]", perl
, "2", match_default
, make_array(0, 1, -2, -2));
152 TEST_REGEX_SEARCH("[[.three.]]", perl
, "3", match_default
, make_array(0, 1, -2, -2));
153 TEST_REGEX_SEARCH("[[.a.]]", perl
, "bac", match_default
, make_array(1, 2, -2, -2));
154 TEST_REGEX_SEARCH("[[.\xf0.]]", perl
, "b\xf0x", match_default
, make_array(1, 2, -2, -2));
155 TEST_REGEX_SEARCH("[[.right-curly-bracket.]]", perl
, "}", match_default
, make_array(0, 1, -2, -2));
156 TEST_REGEX_SEARCH("[[.NUL.]]", perl
, "\0", match_default
, make_array(0, 1, -2, -2));
157 TEST_REGEX_SEARCH("[[.NUL.][.ae.]]", perl
, "\0", match_default
, make_array(0, 1, -2, -2));
158 TEST_REGEX_SEARCH("[[.NUL.]-a]", boost::regex::extended
, "\0", match_default
, make_array(0, 1, -2, -2));
159 TEST_REGEX_SEARCH("[[.NUL.]-a]", perl
, "\0", match_default
, make_array(0, 1, -2, -2));
160 TEST_REGEX_SEARCH("[[.NUL.]-a]", boost::regex::extended
, "a", match_default
, make_array(0, 1, -2, -2));
161 TEST_REGEX_SEARCH("[[.NUL.]-a]", perl
, "a", match_default
, make_array(0, 1, -2, -2));
162 TEST_REGEX_SEARCH("[[.NUL.]-[.NUL.]a]", boost::regex::extended
, "a", match_default
, make_array(0, 1, -2, -2));
163 TEST_REGEX_SEARCH("[[.NUL.]-[.NUL.]a]", perl
, "a", match_default
, make_array(0, 1, -2, -2));
164 TEST_INVALID_REGEX("[[..]]", perl
);
165 TEST_INVALID_REGEX("[[.not-a-collating-element.]]", perl
);
166 TEST_INVALID_REGEX("[[.", perl
);
167 TEST_INVALID_REGEX("[[.N", perl
);
168 TEST_INVALID_REGEX("[[.NUL", perl
);
169 TEST_INVALID_REGEX("[[.NUL.", perl
);
170 TEST_INVALID_REGEX("[[.NUL.]", perl
);
171 TEST_INVALID_REGEX("[[:<:]z]", perl
);
172 TEST_INVALID_REGEX("[a[:>:]]", perl
);
173 TEST_REGEX_SEARCH("[[.A.]]", extended
|icase
, "A", match_default
, make_array(0, 1, -2, -2));
174 TEST_REGEX_SEARCH("[[.A.]]", extended
|icase
, "a", match_default
, make_array(0, 1, -2, -2));
175 TEST_REGEX_SEARCH("[[.A.]-b]+", extended
|icase
, "AaBb", match_default
, make_array(0, 4, -2, -2));
176 TEST_REGEX_SEARCH("[A-[.b.]]+", extended
|icase
, "AaBb", match_default
, make_array(0, 4, -2, -2));
177 TEST_REGEX_SEARCH("[[.a.]-B]+", extended
|icase
, "AaBb", match_default
, make_array(0, 4, -2, -2));
178 TEST_REGEX_SEARCH("[a-[.B.]]+", extended
|icase
, "AaBb", match_default
, make_array(0, 4, -2, -2));
179 TEST_REGEX_SEARCH("[\x61]", extended
, "a", match_default
, make_array(0, 1, -2, -2));
180 TEST_REGEX_SEARCH("[\x61-c]+", extended
, "abcd", match_default
, make_array(0, 3, -2, -2));
181 TEST_REGEX_SEARCH("[a-\x63]+", extended
, "abcd", match_default
, make_array(0, 3, -2, -2));
182 TEST_REGEX_SEARCH("[[.a.]-c]+", extended
, "abcd", match_default
, make_array(0, 3, -2, -2));
183 TEST_REGEX_SEARCH("[a-[.c.]]+", extended
, "abcd", match_default
, make_array(0, 3, -2, -2));
184 TEST_INVALID_REGEX("[[:alpha:]-a]", extended
);
185 TEST_INVALID_REGEX("[a-[:alpha:]]", extended
);
186 TEST_REGEX_SEARCH("[[.ae.]]", basic
, "ae", match_default
, make_array(0, 2, -2, -2));
187 TEST_REGEX_SEARCH("[[.ae.]]", basic
, "aE", match_default
, make_array(-2, -2));
188 TEST_REGEX_SEARCH("[[.AE.]]", basic
, "AE", match_default
, make_array(0, 2, -2, -2));
189 TEST_REGEX_SEARCH("[[.Ae.]]", basic
, "Ae", match_default
, make_array(0, 2, -2, -2));
190 TEST_REGEX_SEARCH("[[.ae.]-b]", basic
, "a", match_default
, make_array(-2, -2));
191 TEST_REGEX_SEARCH("[[.ae.]-b]", basic
, "b", match_default
, make_array(0, 1, -2, -2));
192 TEST_REGEX_SEARCH("[[.ae.]-b]", basic
, "ae", match_default
, make_array(0, 2, -2, -2));
193 TEST_REGEX_SEARCH("[a-[.ae.]]", basic
, "a", match_default
, make_array(0, 1, -2, -2));
194 TEST_REGEX_SEARCH("[a-[.ae.]]", basic
, "b", match_default
, make_array(-2, -2));
195 TEST_REGEX_SEARCH("[a-[.ae.]]", basic
, "ae", match_default
, make_array(0, 2, -2, -2));
196 TEST_REGEX_SEARCH("[[.ae.]]", basic
|icase
, "AE", match_default
, make_array(0, 2, -2, -2));
197 TEST_REGEX_SEARCH("[[.ae.]]", basic
|icase
, "Ae", match_default
, make_array(0, 2, -2, -2));
198 TEST_REGEX_SEARCH("[[.AE.]]", basic
|icase
, "Ae", match_default
, make_array(0, 2, -2, -2));
199 TEST_REGEX_SEARCH("[[.Ae.]]", basic
|icase
, "aE", match_default
, make_array(0, 2, -2, -2));
200 TEST_REGEX_SEARCH("[[.AE.]-B]", basic
|icase
, "a", match_default
, make_array(-2, -2));
201 TEST_REGEX_SEARCH("[[.Ae.]-b]", basic
|icase
, "b", match_default
, make_array(0, 1, -2, -2));
202 TEST_REGEX_SEARCH("[[.Ae.]-b]", basic
|icase
, "B", match_default
, make_array(0, 1, -2, -2));
203 TEST_REGEX_SEARCH("[[.ae.]-b]", basic
|icase
, "AE", match_default
, make_array(0, 2, -2, -2));
204 TEST_REGEX_SEARCH("[[.ae.]]", perl
, "ae", match_default
, make_array(0, 2, -2, -2));
205 TEST_REGEX_SEARCH("[[.ae.]]", perl
, "aE", match_default
, make_array(-2, -2));
206 TEST_REGEX_SEARCH("[[.AE.]]", perl
, "AE", match_default
, make_array(0, 2, -2, -2));
207 TEST_REGEX_SEARCH("[[.Ae.]]", perl
, "Ae", match_default
, make_array(0, 2, -2, -2));
208 TEST_REGEX_SEARCH("[[.ae.]-b]", perl
, "a", match_default
, make_array(-2, -2));
209 TEST_REGEX_SEARCH("[[.ae.]-b]", perl
, "b", match_default
, make_array(0, 1, -2, -2));
210 TEST_REGEX_SEARCH("[[.ae.]-b]", perl
, "ae", match_default
, make_array(0, 2, -2, -2));
211 TEST_REGEX_SEARCH("[a-[.ae.]]", perl
, "a", match_default
, make_array(0, 1, -2, -2));
212 TEST_REGEX_SEARCH("[a-[.ae.]]", perl
, "b", match_default
, make_array(-2, -2));
213 TEST_REGEX_SEARCH("[a-[.ae.]]", perl
, "ae", match_default
, make_array(0, 2, -2, -2));
214 TEST_REGEX_SEARCH("[[.ae.]]", perl
|icase
, "AE", match_default
, make_array(0, 2, -2, -2));
215 TEST_REGEX_SEARCH("[[.ae.]]", perl
|icase
, "Ae", match_default
, make_array(0, 2, -2, -2));
216 TEST_REGEX_SEARCH("[[.AE.]]", perl
|icase
, "Ae", match_default
, make_array(0, 2, -2, -2));
217 TEST_REGEX_SEARCH("[[.Ae.]]", perl
|icase
, "aE", match_default
, make_array(0, 2, -2, -2));
218 TEST_REGEX_SEARCH("[[.AE.]-B]", perl
|icase
, "a", match_default
, make_array(-2, -2));
219 TEST_REGEX_SEARCH("[[.Ae.]-b]", perl
|icase
, "b", match_default
, make_array(0, 1, -2, -2));
220 TEST_REGEX_SEARCH("[[.Ae.]-b]", perl
|icase
, "B", match_default
, make_array(0, 1, -2, -2));
221 TEST_REGEX_SEARCH("[[.ae.]-b]", perl
|icase
, "AE", match_default
, make_array(0, 2, -2, -2));
222 TEST_REGEX_SEARCH("[[.ae.][:lower:]]", perl
|icase
, "AE", match_default
, make_array(0, 2, -2, -2));
223 TEST_REGEX_SEARCH("[[.ae.][:lower:]]", perl
|icase
, "A", match_default
, make_array(0, 1, -2, -2));
224 TEST_REGEX_SEARCH("[[.ae.][=a=]]+", perl
, "zzaA", match_default
, make_array(2, 4, -2, -2));
225 TEST_INVALID_REGEX("[d-[.ae.]]", perl
);
227 // try some equivalence classes:
229 TEST_REGEX_SEARCH("[[=a=]]", basic
, "a", match_default
, make_array(0, 1, -2, -2));
230 TEST_REGEX_SEARCH("[[=a=]]", basic
, "A", match_default
, make_array(0, 1, -2, -2));
231 TEST_REGEX_SEARCH("[[=ae=]]", basic
, "ae", match_default
, make_array(0, 2, -2, -2));
232 TEST_REGEX_SEARCH("[[=right-curly-bracket=]]", basic
, "}", match_default
, make_array(0, 1, -2, -2));
233 TEST_REGEX_SEARCH("[[=NUL=]]", basic
, "\x0", match_default
, make_array(0, 1, -2, -2));
234 TEST_REGEX_SEARCH("[[=NUL=]]", perl
, "\x0", match_default
, make_array(0, 1, -2, -2));
235 TEST_INVALID_REGEX("[[=", perl
);
236 TEST_INVALID_REGEX("[[=a", perl
);
237 TEST_INVALID_REGEX("[[=ae", perl
);
238 TEST_INVALID_REGEX("[[=ae=", perl
);
239 TEST_INVALID_REGEX("[[=ae=]", perl
);
241 // now some perl style single character classes:
243 TEST_REGEX_SEARCH("\\l+", perl
, "ABabcAB", match_default
, make_array(2, 5, -2, -2));
244 TEST_REGEX_SEARCH("[\\l]+", perl
, "ABabcAB", match_default
, make_array(2, 5, -2, -2));
245 TEST_INVALID_REGEX("[\\l-a]", perl
);
246 TEST_REGEX_SEARCH("[\\L]+", perl
, "abABCab", match_default
, make_array(2, 5, -2, -2));
247 TEST_REGEX_SEARCH("[[:^lower:]]+", perl
, "abABCab", match_default
, make_array(2, 5, -2, -2));
248 TEST_REGEX_SEARCH("\\L+", perl
, "abABCab", match_default
, make_array(2, 5, -2, -2));
249 TEST_REGEX_SEARCH("\\u+", perl
, "abABCab", match_default
, make_array(2, 5, -2, -2));
250 TEST_REGEX_SEARCH("[\\u]+", perl
, "abABCab", match_default
, make_array(2, 5, -2, -2));
251 TEST_REGEX_SEARCH("[\\U]+", perl
, "ABabcAB", match_default
, make_array(2, 5, -2, -2));
252 TEST_REGEX_SEARCH("[[:^upper:]]+", perl
, "ABabcAB", match_default
, make_array(2, 5, -2, -2));
253 TEST_REGEX_SEARCH("\\U+", perl
, "ABabcAB", match_default
, make_array(2, 5, -2, -2));
254 TEST_REGEX_SEARCH("\\d+", perl
, "AB012AB", match_default
, make_array(2, 5, -2, -2));
255 TEST_REGEX_SEARCH("[\\d]+", perl
, "AB012AB", match_default
, make_array(2, 5, -2, -2));
256 TEST_REGEX_SEARCH("[\\D]+", perl
, "01abc01", match_default
, make_array(2, 5, -2, -2));
257 TEST_REGEX_SEARCH("[[:^digit:]]+", perl
, "01abc01", match_default
, make_array(2, 5, -2, -2));
258 TEST_REGEX_SEARCH("\\D+", perl
, "01abc01", match_default
, make_array(2, 5, -2, -2));
259 TEST_REGEX_SEARCH("\\s+", perl
, "AB AB", match_default
, make_array(2, 5, -2, -2));
260 TEST_REGEX_SEARCH("[\\s]+", perl
, "AB AB", match_default
, make_array(2, 5, -2, -2));
261 TEST_REGEX_SEARCH("[\\S]+", perl
, " abc ", match_default
, make_array(2, 5, -2, -2));
262 TEST_REGEX_SEARCH("[[:^space:]]+", perl
, " abc ", match_default
, make_array(2, 5, -2, -2));
263 TEST_REGEX_SEARCH("\\S+", perl
, " abc ", match_default
, make_array(2, 5, -2, -2));
264 TEST_REGEX_SEARCH("\\s+", perl
, "AB AB", match_default
, make_array(2, 5, -2, -2));
265 TEST_REGEX_SEARCH("[\\w]+", perl
, "AB_ AB", match_default
, make_array(0, 3, -2, 6, 8, -2, -2));
266 TEST_REGEX_SEARCH("[\\W]+", perl
, "AB_ AB", match_default
, make_array(3, 6, -2, -2));
267 TEST_REGEX_SEARCH("[[:^word:]]+", perl
, "AB_ AB", match_default
, make_array(3, 6, -2, -2));
268 TEST_REGEX_SEARCH("\\W+", perl
, "AB_ AB", match_default
, make_array(3, 6, -2, -2));
269 TEST_REGEX_SEARCH("\\h+", perl
, "\v\f\r\n \t\n", match_default
, make_array(4, 6, -2, -2));
270 TEST_REGEX_SEARCH("\\V+", perl
, "\v\f\r\n \t\n", match_default
, make_array(4, 6, -2, -2));
271 TEST_REGEX_SEARCH("\\H+", perl
, " \t\v\f\r\n ", match_default
, make_array(2, 6, -2, -2));
272 TEST_REGEX_SEARCH("\\v+", perl
, " \t\v\f\r\n ", match_default
, make_array(2, 6, -2, -2));
278 using namespace boost::regex_constants
;
279 // and some Perl style properties:
280 TEST_REGEX_SEARCH("\\pl+", perl
, "ABabcAB", match_default
, make_array(2, 5, -2, -2));
281 TEST_REGEX_SEARCH("\\Pl+", perl
, "abABCab", match_default
, make_array(2, 5, -2, -2));
282 TEST_REGEX_SEARCH("\\pu+", perl
, "abABCab", match_default
, make_array(2, 5, -2, -2));
283 TEST_REGEX_SEARCH("\\Pu+", perl
, "ABabcAB", match_default
, make_array(2, 5, -2, -2));
284 TEST_REGEX_SEARCH("\\pd+", perl
, "AB012AB", match_default
, make_array(2, 5, -2, -2));
285 TEST_REGEX_SEARCH("\\PD+", perl
, "01abc01", match_default
, make_array(2, 5, -2, -2));
286 TEST_REGEX_SEARCH("\\ps+", perl
, "AB AB", match_default
, make_array(2, 5, -2, -2));
287 TEST_REGEX_SEARCH("\\PS+", perl
, " abc ", match_default
, make_array(2, 5, -2, -2));
289 TEST_REGEX_SEARCH("\\p{alnum}+", perl
, "-%@a0X_-", match_default
, make_array(3, 6, -2, -2));
290 TEST_REGEX_SEARCH("\\p{alpha}+", perl
, " -%@aX_0-", match_default
, make_array(4, 6, -2, -2));
291 TEST_REGEX_SEARCH("\\p{blank}+", perl
, "a \tb", match_default
, make_array(1, 4, -2, -2));
292 TEST_REGEX_SEARCH("\\p{cntrl}+", perl
, " a\n\tb", match_default
, make_array(2, 4, -2, -2));
293 TEST_REGEX_SEARCH("\\p{digit}+", perl
, "a019b", match_default
, make_array(1, 4, -2, -2));
294 TEST_REGEX_SEARCH("\\p{graph}+", perl
, " a%b ", match_default
, make_array(1, 4, -2, -2));
295 TEST_REGEX_SEARCH("\\p{lower}+", perl
, "AabC", match_default
, make_array(1, 3, -2, -2));
296 TEST_REGEX_SEARCH("\\p{print}+", perl
, "AabC", match_default
, make_array(0, 4, -2, -2));
297 TEST_REGEX_SEARCH("\\p{punct}+", perl
, " %-&\t", match_default
, make_array(1, 4, -2, -2));
298 TEST_REGEX_SEARCH("\\p{space}+", perl
, "a \n\t\rb", match_default
, make_array(1, 5, -2, -2));
299 TEST_REGEX_SEARCH("\\p{upper}+", perl
, "aBCd", match_default
, make_array(1, 3, -2, -2));
300 TEST_REGEX_SEARCH("\\p{xdigit}+", perl
, "p0f3Cx", match_default
, make_array(1, 5, -2, -2));
301 TEST_REGEX_SEARCH("\\P{alnum}+", perl
, "-%@a", match_default
, make_array(0, 3, -2, -2));
302 TEST_REGEX_SEARCH("\\P{alpha}+", perl
, " -%@a", match_default
, make_array(0, 4, -2, -2));
303 TEST_REGEX_SEARCH("\\P{blank}+", perl
, "a ", match_default
, make_array(0, 1, -2, -2));
304 TEST_REGEX_SEARCH("\\P{cntrl}+", perl
, " a\n", match_default
, make_array(0, 2, -2, -2));
305 TEST_REGEX_SEARCH("\\P{digit}+", perl
, "a0", match_default
, make_array(0, 1, -2, -2));
306 TEST_REGEX_SEARCH("\\P{graph}+", perl
, " a", match_default
, make_array(0, 1, -2, -2));
307 TEST_REGEX_SEARCH("\\P{lower}+", perl
, "Aa", match_default
, make_array(0, 1, -2, -2));
308 TEST_REGEX_SEARCH("\\P{print}+", perl
, "Absc", match_default
, make_array(-2, -2));
309 TEST_REGEX_SEARCH("\\P{punct}+", perl
, " %", match_default
, make_array(0, 1, -2, -2));
310 TEST_REGEX_SEARCH("\\P{space}+", perl
, "a ", match_default
, make_array(0, 1, -2, -2));
311 TEST_REGEX_SEARCH("\\P{upper}+", perl
, "aB", match_default
, make_array(0, 1, -2, -2));
312 TEST_REGEX_SEARCH("\\P{xdigit}+", perl
, "pf", match_default
, make_array(0, 1, -2, -2));
314 TEST_INVALID_REGEX("\\p{invalid class}", perl
);
315 TEST_INVALID_REGEX("\\p{upper", perl
);
316 TEST_INVALID_REGEX("\\p{", perl
);
317 TEST_INVALID_REGEX("\\p", perl
);
318 TEST_INVALID_REGEX("\\P{invalid class}", perl
);
319 TEST_INVALID_REGEX("\\P{upper", perl
);
320 TEST_INVALID_REGEX("\\P{", perl
);
321 TEST_INVALID_REGEX("\\P", perl
);
323 // try named characters:
324 TEST_REGEX_SEARCH("\\N{zero}", perl
, "0", match_default
, make_array(0, 1, -2, -2));
325 TEST_REGEX_SEARCH("\\N{one}", perl
, "1", match_default
, make_array(0, 1, -2, -2));
326 TEST_REGEX_SEARCH("\\N{two}", perl
, "2", match_default
, make_array(0, 1, -2, -2));
327 TEST_REGEX_SEARCH("\\N{three}", perl
, "3", match_default
, make_array(0, 1, -2, -2));
328 TEST_REGEX_SEARCH("\\N{a}", perl
, "bac", match_default
, make_array(1, 2, -2, -2));
329 TEST_REGEX_SEARCH("\\N{\xf0}", perl
, "b\xf0x", match_default
, make_array(1, 2, -2, -2));
330 TEST_REGEX_SEARCH("\\N{right-curly-bracket}", perl
, "}", match_default
, make_array(0, 1, -2, -2));
331 TEST_REGEX_SEARCH("\\N{NUL}", perl
, "\0", match_default
, make_array(0, 1, -2, -2));
332 TEST_REGEX_SEARCH("[\\N{zero}-\\N{nine}]+", perl
, " 0123456789 ", match_default
, make_array(1, 11, -2, -2));
334 TEST_INVALID_REGEX("\\N", perl
);
335 TEST_INVALID_REGEX("\\N{", perl
);
336 TEST_INVALID_REGEX("\\N{}", perl
);
337 TEST_INVALID_REGEX("\\N{invalid-name}", perl
);
338 TEST_INVALID_REGEX("\\N{zero", perl
);
344 using namespace boost::regex_constants
;
346 // and repeat with POSIX-boost::regex::extended syntax:
347 TEST_REGEX_SEARCH("\\pl+", boost::regex::extended
, "ABabcAB", match_default
, make_array(2, 5, -2, -2));
348 TEST_REGEX_SEARCH("\\Pl+", boost::regex::extended
, "abABCab", match_default
, make_array(2, 5, -2, -2));
349 TEST_REGEX_SEARCH("\\pu+", boost::regex::extended
, "abABCab", match_default
, make_array(2, 5, -2, -2));
350 TEST_REGEX_SEARCH("\\Pu+", boost::regex::extended
, "ABabcAB", match_default
, make_array(2, 5, -2, -2));
351 TEST_REGEX_SEARCH("\\pd+", boost::regex::extended
, "AB012AB", match_default
, make_array(2, 5, -2, -2));
352 TEST_REGEX_SEARCH("\\PD+", boost::regex::extended
, "01abc01", match_default
, make_array(2, 5, -2, -2));
353 TEST_REGEX_SEARCH("\\ps+", boost::regex::extended
, "AB AB", match_default
, make_array(2, 5, -2, -2));
354 TEST_REGEX_SEARCH("\\PS+", boost::regex::extended
, " abc ", match_default
, make_array(2, 5, -2, -2));
356 TEST_REGEX_SEARCH("\\p{alnum}+", boost::regex::extended
, "-%@a0X_-", match_default
, make_array(3, 6, -2, -2));
357 TEST_REGEX_SEARCH("\\p{alpha}+", boost::regex::extended
, " -%@aX_0-", match_default
, make_array(4, 6, -2, -2));
358 TEST_REGEX_SEARCH("\\p{blank}+", boost::regex::extended
, "a \tb", match_default
, make_array(1, 4, -2, -2));
359 TEST_REGEX_SEARCH("\\p{cntrl}+", boost::regex::extended
, " a\n\tb", match_default
, make_array(2, 4, -2, -2));
360 TEST_REGEX_SEARCH("\\p{digit}+", boost::regex::extended
, "a019b", match_default
, make_array(1, 4, -2, -2));
361 TEST_REGEX_SEARCH("\\p{graph}+", boost::regex::extended
, " a%b ", match_default
, make_array(1, 4, -2, -2));
362 TEST_REGEX_SEARCH("\\p{lower}+", boost::regex::extended
, "AabC", match_default
, make_array(1, 3, -2, -2));
363 TEST_REGEX_SEARCH("\\p{print}+", boost::regex::extended
, "AabC", match_default
, make_array(0, 4, -2, -2));
364 TEST_REGEX_SEARCH("\\p{punct}+", boost::regex::extended
, " %-&\t", match_default
, make_array(1, 4, -2, -2));
365 TEST_REGEX_SEARCH("\\p{space}+", boost::regex::extended
, "a \n\t\rb", match_default
, make_array(1, 5, -2, -2));
366 TEST_REGEX_SEARCH("\\p{upper}+", boost::regex::extended
, "aBCd", match_default
, make_array(1, 3, -2, -2));
367 TEST_REGEX_SEARCH("\\p{xdigit}+", boost::regex::extended
, "p0f3Cx", match_default
, make_array(1, 5, -2, -2));
368 TEST_REGEX_SEARCH("\\P{alnum}+", boost::regex::extended
, "-%@a", match_default
, make_array(0, 3, -2, -2));
369 TEST_REGEX_SEARCH("\\P{alpha}+", boost::regex::extended
, " -%@a", match_default
, make_array(0, 4, -2, -2));
370 TEST_REGEX_SEARCH("\\P{blank}+", boost::regex::extended
, "a ", match_default
, make_array(0, 1, -2, -2));
371 TEST_REGEX_SEARCH("\\P{cntrl}+", boost::regex::extended
, " a\n", match_default
, make_array(0, 2, -2, -2));
372 TEST_REGEX_SEARCH("\\P{digit}+", boost::regex::extended
, "a0", match_default
, make_array(0, 1, -2, -2));
373 TEST_REGEX_SEARCH("\\P{graph}+", boost::regex::extended
, " a", match_default
, make_array(0, 1, -2, -2));
374 TEST_REGEX_SEARCH("\\P{lower}+", boost::regex::extended
, "Aa", match_default
, make_array(0, 1, -2, -2));
375 TEST_REGEX_SEARCH("\\P{print}+", boost::regex::extended
, "Absc", match_default
, make_array(-2, -2));
376 TEST_REGEX_SEARCH("\\P{punct}+", boost::regex::extended
, " %", match_default
, make_array(0, 1, -2, -2));
377 TEST_REGEX_SEARCH("\\P{space}+", boost::regex::extended
, "a ", match_default
, make_array(0, 1, -2, -2));
378 TEST_REGEX_SEARCH("\\P{upper}+", boost::regex::extended
, "aB", match_default
, make_array(0, 1, -2, -2));
379 TEST_REGEX_SEARCH("\\P{xdigit}+", boost::regex::extended
, "pf", match_default
, make_array(0, 1, -2, -2));
381 TEST_INVALID_REGEX("\\p{invalid class}", boost::regex::extended
);
382 TEST_INVALID_REGEX("\\p{upper", boost::regex::extended
);
383 TEST_INVALID_REGEX("\\p{", boost::regex::extended
);
384 TEST_INVALID_REGEX("\\p", boost::regex::extended
);
385 TEST_INVALID_REGEX("\\P{invalid class}", boost::regex::extended
);
386 TEST_INVALID_REGEX("\\P{upper", boost::regex::extended
);
387 TEST_INVALID_REGEX("\\P{", boost::regex::extended
);
388 TEST_INVALID_REGEX("\\P", boost::regex::extended
);
390 // try named characters:
391 TEST_REGEX_SEARCH("\\N{zero}", boost::regex::extended
, "0", match_default
, make_array(0, 1, -2, -2));
392 TEST_REGEX_SEARCH("\\N{one}", boost::regex::extended
, "1", match_default
, make_array(0, 1, -2, -2));
393 TEST_REGEX_SEARCH("\\N{two}", boost::regex::extended
, "2", match_default
, make_array(0, 1, -2, -2));
394 TEST_REGEX_SEARCH("\\N{three}", boost::regex::extended
, "3", match_default
, make_array(0, 1, -2, -2));
395 TEST_REGEX_SEARCH("\\N{a}", boost::regex::extended
, "bac", match_default
, make_array(1, 2, -2, -2));
396 TEST_REGEX_SEARCH("\\N{\xf0}", boost::regex::extended
, "b\xf0x", match_default
, make_array(1, 2, -2, -2));
397 TEST_REGEX_SEARCH("\\N{right-curly-bracket}", boost::regex::extended
, "}", match_default
, make_array(0, 1, -2, -2));
398 TEST_REGEX_SEARCH("\\N{NUL}", boost::regex::extended
, "\0", match_default
, make_array(0, 1, -2, -2));
400 TEST_INVALID_REGEX("\\N", boost::regex::extended
);
401 TEST_INVALID_REGEX("\\N{", boost::regex::extended
);
402 TEST_INVALID_REGEX("\\N{}", boost::regex::extended
);
403 TEST_INVALID_REGEX("\\N{invalid-name}", boost::regex::extended
);
404 TEST_INVALID_REGEX("\\N{zero", boost::regex::extended
);