1 //===----------------------------------------------------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // NetBSD does not support LC_COLLATE at the moment
11 // XFAIL: netbsd
12
13 // REQUIRES: locale.cs_CZ.ISO8859-2
14
15 // <regex>
16
17 // template <class BidirectionalIterator, class Allocator, class charT, class traits>
18 // bool
19 // regex_match(BidirectionalIterator first, BidirectionalIterator last,
20 // match_results<BidirectionalIterator, Allocator>& m,
21 // const basic_regex<charT, traits>& e,
22 // regex_constants::match_flag_type flags = regex_constants::match_default);
23
24 // TODO: investigation needed
25 // XFAIL: linux-gnu
26
27 #include <regex>
28 #include <cassert>
29 #include "test_macros.h"
30 #include "test_iterators.h"
31
32 #include "platform_support.h" // locale name macros
33
main()34 int main()
35 {
36 {
37 std::cmatch m;
38 const char s[] = "a";
39 assert(std::regex_match(s, m, std::regex("a", std::regex_constants::extended)));
40 assert(m.size() == 1);
41 assert(!m.empty());
42 assert(!m.prefix().matched);
43 assert(m.prefix().first == s);
44 assert(m.prefix().second == m[0].first);
45 assert(!m.suffix().matched);
46 assert(m.suffix().first == m[0].second);
47 assert(m.suffix().second == s+1);
48 assert(m.length(0) == 1);
49 assert(m.position(0) == 0);
50 assert(m.str(0) == "a");
51 }
52 {
53 std::cmatch m;
54 const char s[] = "ab";
55 assert(std::regex_match(s, m, std::regex("ab", std::regex_constants::extended)));
56 assert(m.size() == 1);
57 assert(!m.prefix().matched);
58 assert(m.prefix().first == s);
59 assert(m.prefix().second == m[0].first);
60 assert(!m.suffix().matched);
61 assert(m.suffix().first == m[0].second);
62 assert(m.suffix().second == s+2);
63 assert(m.length(0) == 2);
64 assert(m.position(0) == 0);
65 assert(m.str(0) == "ab");
66 }
67 {
68 std::cmatch m;
69 const char s[] = "ab";
70 assert(!std::regex_match(s, m, std::regex("ba", std::regex_constants::extended)));
71 assert(m.size() == 0);
72 assert(m.empty());
73 }
74 {
75 std::cmatch m;
76 const char s[] = "aab";
77 assert(!std::regex_match(s, m, std::regex("ab", std::regex_constants::extended)));
78 assert(m.size() == 0);
79 }
80 {
81 std::cmatch m;
82 const char s[] = "aab";
83 assert(!std::regex_match(s, m, std::regex("ab", std::regex_constants::extended),
84 std::regex_constants::match_continuous));
85 assert(m.size() == 0);
86 }
87 {
88 std::cmatch m;
89 const char s[] = "abcd";
90 assert(!std::regex_match(s, m, std::regex("bc", std::regex_constants::extended)));
91 assert(m.size() == 0);
92 }
93 {
94 std::cmatch m;
95 const char s[] = "abbc";
96 assert(std::regex_match(s, m, std::regex("ab*c", std::regex_constants::extended)));
97 assert(m.size() == 1);
98 assert(!m.prefix().matched);
99 assert(m.prefix().first == s);
100 assert(m.prefix().second == m[0].first);
101 assert(!m.suffix().matched);
102 assert(m.suffix().first == m[0].second);
103 assert(m.suffix().second == s+4);
104 assert(m.length(0) == 4);
105 assert(m.position(0) == 0);
106 assert(m.str(0) == s);
107 }
108 {
109 std::cmatch m;
110 const char s[] = "ababc";
111 assert(std::regex_match(s, m, std::regex("(ab)*c", std::regex_constants::extended)));
112 assert(m.size() == 2);
113 assert(!m.prefix().matched);
114 assert(m.prefix().first == s);
115 assert(m.prefix().second == m[0].first);
116 assert(!m.suffix().matched);
117 assert(m.suffix().first == m[0].second);
118 assert(m.suffix().second == s+5);
119 assert(m.length(0) == 5);
120 assert(m.position(0) == 0);
121 assert(m.str(0) == s);
122 assert(m.length(1) == 2);
123 assert(m.position(1) == 2);
124 assert(m.str(1) == "ab");
125 }
126 {
127 std::cmatch m;
128 const char s[] = "abcdefghijk";
129 assert(!std::regex_match(s, m, std::regex("cd((e)fg)hi",
130 std::regex_constants::extended)));
131 assert(m.size() == 0);
132 }
133 {
134 std::cmatch m;
135 const char s[] = "abc";
136 assert(std::regex_match(s, m, std::regex("^abc", std::regex_constants::extended)));
137 assert(m.size() == 1);
138 assert(!m.prefix().matched);
139 assert(m.prefix().first == s);
140 assert(m.prefix().second == m[0].first);
141 assert(!m.suffix().matched);
142 assert(m.suffix().first == m[0].second);
143 assert(m.suffix().second == s+3);
144 assert(m.length(0) == 3);
145 assert(m.position(0) == 0);
146 assert(m.str(0) == s);
147 }
148 {
149 std::cmatch m;
150 const char s[] = "abcd";
151 assert(!std::regex_match(s, m, std::regex("^abc", std::regex_constants::extended)));
152 assert(m.size() == 0);
153 }
154 {
155 std::cmatch m;
156 const char s[] = "aabc";
157 assert(!std::regex_match(s, m, std::regex("^abc", std::regex_constants::extended)));
158 assert(m.size() == 0);
159 }
160 {
161 std::cmatch m;
162 const char s[] = "abc";
163 assert(std::regex_match(s, m, std::regex("abc$", std::regex_constants::extended)));
164 assert(m.size() == 1);
165 assert(!m.prefix().matched);
166 assert(m.prefix().first == s);
167 assert(m.prefix().second == m[0].first);
168 assert(!m.suffix().matched);
169 assert(m.suffix().first == m[0].second);
170 assert(m.suffix().second == s+3);
171 assert(m.length(0) == 3);
172 assert(m.position(0) == 0);
173 assert(m.str(0) == s);
174 }
175 {
176 std::cmatch m;
177 const char s[] = "efabc";
178 assert(!std::regex_match(s, m, std::regex("abc$", std::regex_constants::extended)));
179 assert(m.size() == 0);
180 }
181 {
182 std::cmatch m;
183 const char s[] = "efabcg";
184 assert(!std::regex_match(s, m, std::regex("abc$", std::regex_constants::extended)));
185 assert(m.size() == 0);
186 }
187 {
188 std::cmatch m;
189 const char s[] = "abc";
190 assert(std::regex_match(s, m, std::regex("a.c", std::regex_constants::extended)));
191 assert(m.size() == 1);
192 assert(!m.prefix().matched);
193 assert(m.prefix().first == s);
194 assert(m.prefix().second == m[0].first);
195 assert(!m.suffix().matched);
196 assert(m.suffix().first == m[0].second);
197 assert(m.suffix().second == s+3);
198 assert(m.length(0) == 3);
199 assert(m.position(0) == 0);
200 assert(m.str(0) == s);
201 }
202 {
203 std::cmatch m;
204 const char s[] = "acc";
205 assert(std::regex_match(s, m, std::regex("a.c", std::regex_constants::extended)));
206 assert(m.size() == 1);
207 assert(!m.prefix().matched);
208 assert(m.prefix().first == s);
209 assert(m.prefix().second == m[0].first);
210 assert(!m.suffix().matched);
211 assert(m.suffix().first == m[0].second);
212 assert(m.suffix().second == s+3);
213 assert(m.length(0) == 3);
214 assert(m.position(0) == 0);
215 assert(m.str(0) == s);
216 }
217 {
218 std::cmatch m;
219 const char s[] = "acc";
220 assert(std::regex_match(s, m, std::regex("a.c", std::regex_constants::extended)));
221 assert(m.size() == 1);
222 assert(!m.prefix().matched);
223 assert(m.prefix().first == s);
224 assert(m.prefix().second == m[0].first);
225 assert(!m.suffix().matched);
226 assert(m.suffix().first == m[0].second);
227 assert(m.suffix().second == s+3);
228 assert(m.length(0) == 3);
229 assert(m.position(0) == 0);
230 assert(m.str(0) == s);
231 }
232 {
233 std::cmatch m;
234 const char s[] = "abcdef";
235 assert(std::regex_match(s, m, std::regex("(.*).*", std::regex_constants::extended)));
236 assert(m.size() == 2);
237 assert(!m.prefix().matched);
238 assert(m.prefix().first == s);
239 assert(m.prefix().second == m[0].first);
240 assert(!m.suffix().matched);
241 assert(m.suffix().first == m[0].second);
242 assert(m.suffix().second == s+6);
243 assert(m.length(0) == 6);
244 assert(m.position(0) == 0);
245 assert(m.str(0) == s);
246 assert(m.length(1) == 6);
247 assert(m.position(1) == 0);
248 assert(m.str(1) == s);
249 }
250 {
251 std::cmatch m;
252 const char s[] = "bc";
253 assert(!std::regex_match(s, m, std::regex("(a*)*", std::regex_constants::extended)));
254 assert(m.size() == 0);
255 }
256 {
257 std::cmatch m;
258 const char s[] = "abbc";
259 assert(!std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::extended)));
260 assert(m.size() == 0);
261 }
262 {
263 std::cmatch m;
264 const char s[] = "abbbc";
265 assert(std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::extended)));
266 assert(m.size() == 1);
267 assert(!m.prefix().matched);
268 assert(m.prefix().first == s);
269 assert(m.prefix().second == m[0].first);
270 assert(!m.suffix().matched);
271 assert(m.suffix().first == m[0].second);
272 assert(m.suffix().second == m[0].second);
273 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
274 assert(m.position(0) == 0);
275 assert(m.str(0) == s);
276 }
277 {
278 std::cmatch m;
279 const char s[] = "abbbbc";
280 assert(std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::extended)));
281 assert(m.size() == 1);
282 assert(!m.prefix().matched);
283 assert(m.prefix().first == s);
284 assert(m.prefix().second == m[0].first);
285 assert(!m.suffix().matched);
286 assert(m.suffix().first == m[0].second);
287 assert(m.suffix().second == m[0].second);
288 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
289 assert(m.position(0) == 0);
290 assert(m.str(0) == s);
291 }
292 {
293 std::cmatch m;
294 const char s[] = "abbbbbc";
295 assert(std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::extended)));
296 assert(m.size() == 1);
297 assert(!m.prefix().matched);
298 assert(m.prefix().first == s);
299 assert(m.prefix().second == m[0].first);
300 assert(!m.suffix().matched);
301 assert(m.suffix().first == m[0].second);
302 assert(m.suffix().second == m[0].second);
303 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
304 assert(m.position(0) == 0);
305 assert(m.str(0) == s);
306 }
307 {
308 std::cmatch m;
309 const char s[] = "adefc";
310 assert(!std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::extended)));
311 assert(m.size() == 0);
312 }
313 {
314 std::cmatch m;
315 const char s[] = "abbbbbbc";
316 assert(!std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::extended)));
317 assert(m.size() == 0);
318 }
319 {
320 std::cmatch m;
321 const char s[] = "adec";
322 assert(!std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::extended)));
323 assert(m.size() == 0);
324 }
325 {
326 std::cmatch m;
327 const char s[] = "adefc";
328 assert(std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::extended)));
329 assert(m.size() == 1);
330 assert(!m.prefix().matched);
331 assert(m.prefix().first == s);
332 assert(m.prefix().second == m[0].first);
333 assert(!m.suffix().matched);
334 assert(m.suffix().first == m[0].second);
335 assert(m.suffix().second == m[0].second);
336 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
337 assert(m.position(0) == 0);
338 assert(m.str(0) == s);
339 }
340 {
341 std::cmatch m;
342 const char s[] = "adefgc";
343 assert(std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::extended)));
344 assert(m.size() == 1);
345 assert(!m.prefix().matched);
346 assert(m.prefix().first == s);
347 assert(m.prefix().second == m[0].first);
348 assert(!m.suffix().matched);
349 assert(m.suffix().first == m[0].second);
350 assert(m.suffix().second == m[0].second);
351 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
352 assert(m.position(0) == 0);
353 assert(m.str(0) == s);
354 }
355 {
356 std::cmatch m;
357 const char s[] = "adefghc";
358 assert(std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::extended)));
359 assert(m.size() == 1);
360 assert(!m.prefix().matched);
361 assert(m.prefix().first == s);
362 assert(m.prefix().second == m[0].first);
363 assert(!m.suffix().matched);
364 assert(m.suffix().first == m[0].second);
365 assert(m.suffix().second == m[0].second);
366 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
367 assert(m.position(0) == 0);
368 assert(m.str(0) == s);
369 }
370 {
371 std::cmatch m;
372 const char s[] = "adefghic";
373 assert(!std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::extended)));
374 assert(m.size() == 0);
375 }
376 {
377 std::cmatch m;
378 const char s[] = "tournament";
379 assert(std::regex_match(s, m, std::regex("tour|to|tournament",
380 std::regex_constants::extended)));
381 assert(m.size() == 1);
382 assert(!m.prefix().matched);
383 assert(m.prefix().first == s);
384 assert(m.prefix().second == m[0].first);
385 assert(!m.suffix().matched);
386 assert(m.suffix().first == m[0].second);
387 assert(m.suffix().second == m[0].second);
388 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
389 assert(m.position(0) == 0);
390 assert(m.str(0) == s);
391 }
392 {
393 std::cmatch m;
394 const char s[] = "tournamenttotour";
395 assert(std::regex_match(s, m, std::regex("(tour|to|tournament)+",
396 std::regex_constants::extended | std::regex_constants::nosubs)));
397 assert(m.size() == 1);
398 assert(!m.prefix().matched);
399 assert(m.prefix().first == s);
400 assert(m.prefix().second == m[0].first);
401 assert(!m.suffix().matched);
402 assert(m.suffix().first == m[0].second);
403 assert(m.suffix().second == m[0].second);
404 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
405 assert(m.position(0) == 0);
406 assert(m.str(0) == s);
407 }
408 {
409 std::cmatch m;
410 const char s[] = "ttotour";
411 assert(std::regex_match(s, m, std::regex("(tour|to|t)+",
412 std::regex_constants::extended)));
413 assert(m.size() == 2);
414 assert(!m.prefix().matched);
415 assert(m.prefix().first == s);
416 assert(m.prefix().second == m[0].first);
417 assert(!m.suffix().matched);
418 assert(m.suffix().first == m[0].second);
419 assert(m.suffix().second == m[0].second);
420 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
421 assert(m.position(0) == 0);
422 assert(m.str(0) == s);
423 assert(m.length(1) == 4);
424 assert(m.position(1) == 3);
425 assert(m.str(1) == "tour");
426 }
427 {
428 std::cmatch m;
429 const char s[] = "-ab,ab-";
430 assert(!std::regex_match(s, m, std::regex("-(.*),\1-", std::regex_constants::extended)));
431 assert(m.size() == 0);
432 }
433 {
434 std::cmatch m;
435 const char s[] = "-ab,ab-";
436 assert(std::regex_match(s, m, std::regex("-.*,.*-", std::regex_constants::extended)));
437 assert(m.size() == 1);
438 assert(!m.prefix().matched);
439 assert(m.prefix().first == s);
440 assert(m.prefix().second == m[0].first);
441 assert(!m.suffix().matched);
442 assert(m.suffix().first == m[0].second);
443 assert(m.suffix().second == m[0].second);
444 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
445 assert(m.position(0) == 0);
446 assert(m.str(0) == s);
447 }
448 {
449 std::cmatch m;
450 const char s[] = "a";
451 assert(std::regex_match(s, m, std::regex("^[a]$",
452 std::regex_constants::extended)));
453 assert(m.size() == 1);
454 assert(!m.prefix().matched);
455 assert(m.prefix().first == s);
456 assert(m.prefix().second == m[0].first);
457 assert(!m.suffix().matched);
458 assert(m.suffix().first == m[0].second);
459 assert(m.suffix().second == m[0].second);
460 assert(m.length(0) == 1);
461 assert(m.position(0) == 0);
462 assert(m.str(0) == "a");
463 }
464 {
465 std::cmatch m;
466 const char s[] = "a";
467 assert(std::regex_match(s, m, std::regex("^[ab]$",
468 std::regex_constants::extended)));
469 assert(m.size() == 1);
470 assert(!m.prefix().matched);
471 assert(m.prefix().first == s);
472 assert(m.prefix().second == m[0].first);
473 assert(!m.suffix().matched);
474 assert(m.suffix().first == m[0].second);
475 assert(m.suffix().second == m[0].second);
476 assert(m.length(0) == 1);
477 assert(m.position(0) == 0);
478 assert(m.str(0) == "a");
479 }
480 {
481 std::cmatch m;
482 const char s[] = "c";
483 assert(std::regex_match(s, m, std::regex("^[a-f]$",
484 std::regex_constants::extended)));
485 assert(m.size() == 1);
486 assert(!m.prefix().matched);
487 assert(m.prefix().first == s);
488 assert(m.prefix().second == m[0].first);
489 assert(!m.suffix().matched);
490 assert(m.suffix().first == m[0].second);
491 assert(m.suffix().second == m[0].second);
492 assert(m.length(0) == 1);
493 assert(m.position(0) == 0);
494 assert(m.str(0) == s);
495 }
496 {
497 std::cmatch m;
498 const char s[] = "g";
499 assert(!std::regex_match(s, m, std::regex("^[a-f]$",
500 std::regex_constants::extended)));
501 assert(m.size() == 0);
502 }
503 {
504 std::cmatch m;
505 const char s[] = "Iraqi";
506 assert(!std::regex_match(s, m, std::regex("q[^u]",
507 std::regex_constants::extended)));
508 assert(m.size() == 0);
509 }
510 {
511 std::cmatch m;
512 const char s[] = "Iraq";
513 assert(!std::regex_match(s, m, std::regex("q[^u]",
514 std::regex_constants::extended)));
515 assert(m.size() == 0);
516 }
517 {
518 std::cmatch m;
519 const char s[] = "AmB";
520 assert(std::regex_match(s, m, std::regex("A[[:lower:]]B",
521 std::regex_constants::extended)));
522 assert(m.size() == 1);
523 assert(!m.prefix().matched);
524 assert(m.prefix().first == s);
525 assert(m.prefix().second == m[0].first);
526 assert(!m.suffix().matched);
527 assert(m.suffix().first == m[0].second);
528 assert(m.suffix().second == m[0].second);
529 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
530 assert(m.position(0) == 0);
531 assert(m.str(0) == s);
532 }
533 {
534 std::cmatch m;
535 const char s[] = "AMB";
536 assert(!std::regex_match(s, m, std::regex("A[[:lower:]]B",
537 std::regex_constants::extended)));
538 assert(m.size() == 0);
539 }
540 {
541 std::cmatch m;
542 const char s[] = "AMB";
543 assert(std::regex_match(s, m, std::regex("A[^[:lower:]]B",
544 std::regex_constants::extended)));
545 assert(m.size() == 1);
546 assert(!m.prefix().matched);
547 assert(m.prefix().first == s);
548 assert(m.prefix().second == m[0].first);
549 assert(!m.suffix().matched);
550 assert(m.suffix().first == m[0].second);
551 assert(m.suffix().second == m[0].second);
552 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
553 assert(m.position(0) == 0);
554 assert(m.str(0) == s);
555 }
556 {
557 std::cmatch m;
558 const char s[] = "AmB";
559 assert(!std::regex_match(s, m, std::regex("A[^[:lower:]]B",
560 std::regex_constants::extended)));
561 assert(m.size() == 0);
562 }
563 {
564 std::cmatch m;
565 const char s[] = "A5B";
566 assert(!std::regex_match(s, m, std::regex("A[^[:lower:]0-9]B",
567 std::regex_constants::extended)));
568 assert(m.size() == 0);
569 }
570 {
571 std::cmatch m;
572 const char s[] = "A?B";
573 assert(std::regex_match(s, m, std::regex("A[^[:lower:]0-9]B",
574 std::regex_constants::extended)));
575 assert(m.size() == 1);
576 assert(!m.prefix().matched);
577 assert(m.prefix().first == s);
578 assert(m.prefix().second == m[0].first);
579 assert(!m.suffix().matched);
580 assert(m.suffix().first == m[0].second);
581 assert(m.suffix().second == m[0].second);
582 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
583 assert(m.position(0) == 0);
584 assert(m.str(0) == s);
585 }
586 {
587 std::cmatch m;
588 const char s[] = "-";
589 assert(std::regex_match(s, m, std::regex("[a[.hyphen.]z]",
590 std::regex_constants::extended)));
591 assert(m.size() == 1);
592 assert(!m.prefix().matched);
593 assert(m.prefix().first == s);
594 assert(m.prefix().second == m[0].first);
595 assert(!m.suffix().matched);
596 assert(m.suffix().first == m[0].second);
597 assert(m.suffix().second == m[0].second);
598 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
599 assert(m.position(0) == 0);
600 assert(m.str(0) == s);
601 }
602 {
603 std::cmatch m;
604 const char s[] = "z";
605 assert(std::regex_match(s, m, std::regex("[a[.hyphen.]z]",
606 std::regex_constants::extended)));
607 assert(m.size() == 1);
608 assert(!m.prefix().matched);
609 assert(m.prefix().first == s);
610 assert(m.prefix().second == m[0].first);
611 assert(!m.suffix().matched);
612 assert(m.suffix().first == m[0].second);
613 assert(m.suffix().second == m[0].second);
614 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
615 assert(m.position(0) == 0);
616 assert(m.str(0) == s);
617 }
618 {
619 std::cmatch m;
620 const char s[] = "m";
621 assert(!std::regex_match(s, m, std::regex("[a[.hyphen.]z]",
622 std::regex_constants::extended)));
623 assert(m.size() == 0);
624 }
625 std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
626 {
627 std::cmatch m;
628 const char s[] = "m";
629 assert(std::regex_match(s, m, std::regex("[a[=M=]z]",
630 std::regex_constants::extended)));
631 assert(m.size() == 1);
632 assert(!m.prefix().matched);
633 assert(m.prefix().first == s);
634 assert(m.prefix().second == m[0].first);
635 assert(!m.suffix().matched);
636 assert(m.suffix().first == m[0].second);
637 assert(m.suffix().second == m[0].second);
638 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
639 assert(m.position(0) == 0);
640 assert(m.str(0) == s);
641 }
642 {
643 std::cmatch m;
644 const char s[] = "Ch";
645 assert(std::regex_match(s, m, std::regex("[a[.ch.]z]",
646 std::regex_constants::extended | std::regex_constants::icase)));
647 assert(m.size() == 1);
648 assert(!m.prefix().matched);
649 assert(m.prefix().first == s);
650 assert(m.prefix().second == m[0].first);
651 assert(!m.suffix().matched);
652 assert(m.suffix().first == m[0].second);
653 assert(m.suffix().second == m[0].second);
654 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s));
655 assert(m.position(0) == 0);
656 assert(m.str(0) == s);
657 }
658 std::locale::global(std::locale("C"));
659 {
660 std::cmatch m;
661 const char s[] = "m";
662 assert(!std::regex_match(s, m, std::regex("[a[=M=]z]",
663 std::regex_constants::extended)));
664 assert(m.size() == 0);
665 }
666 {
667 std::cmatch m;
668 const char s[] = "01a45cef9";
669 assert(!std::regex_match(s, m, std::regex("[ace1-9]*",
670 std::regex_constants::extended)));
671 assert(m.size() == 0);
672 }
673 {
674 std::cmatch m;
675 const char s[] = "01a45cef9";
676 assert(!std::regex_match(s, m, std::regex("[ace1-9]+",
677 std::regex_constants::extended)));
678 assert(m.size() == 0);
679 }
680 {
681 const char r[] = "^[-+]?[0-9]+[CF]$";
682 std::ptrdiff_t sr = std::char_traits<char>::length(r);
683 typedef forward_iterator<const char*> FI;
684 typedef bidirectional_iterator<const char*> BI;
685 std::regex regex(FI(r), FI(r+sr), std::regex_constants::extended);
686 std::match_results<BI> m;
687 const char s[] = "-40C";
688 std::ptrdiff_t ss = std::char_traits<char>::length(s);
689 assert(std::regex_match(BI(s), BI(s+ss), m, regex));
690 assert(m.size() == 1);
691 assert(!m.prefix().matched);
692 assert(m.prefix().first == BI(s));
693 assert(m.prefix().second == m[0].first);
694 assert(!m.suffix().matched);
695 assert(m.suffix().first == m[0].second);
696 assert(m.suffix().second == m[0].second);
697 assert(m.length(0) == 4);
698 assert(m.position(0) == 0);
699 assert(m.str(0) == s);
700 }
701
702 {
703 std::wcmatch m;
704 const wchar_t s[] = L"a";
705 assert(std::regex_match(s, m, std::wregex(L"a", std::regex_constants::extended)));
706 assert(m.size() == 1);
707 assert(!m.empty());
708 assert(!m.prefix().matched);
709 assert(m.prefix().first == s);
710 assert(m.prefix().second == m[0].first);
711 assert(!m.suffix().matched);
712 assert(m.suffix().first == m[0].second);
713 assert(m.suffix().second == s+1);
714 assert(m.length(0) == 1);
715 assert(m.position(0) == 0);
716 assert(m.str(0) == L"a");
717 }
718 {
719 std::wcmatch m;
720 const wchar_t s[] = L"ab";
721 assert(std::regex_match(s, m, std::wregex(L"ab", std::regex_constants::extended)));
722 assert(m.size() == 1);
723 assert(!m.prefix().matched);
724 assert(m.prefix().first == s);
725 assert(m.prefix().second == m[0].first);
726 assert(!m.suffix().matched);
727 assert(m.suffix().first == m[0].second);
728 assert(m.suffix().second == s+2);
729 assert(m.length(0) == 2);
730 assert(m.position(0) == 0);
731 assert(m.str(0) == L"ab");
732 }
733 {
734 std::wcmatch m;
735 const wchar_t s[] = L"ab";
736 assert(!std::regex_match(s, m, std::wregex(L"ba", std::regex_constants::extended)));
737 assert(m.size() == 0);
738 assert(m.empty());
739 }
740 {
741 std::wcmatch m;
742 const wchar_t s[] = L"aab";
743 assert(!std::regex_match(s, m, std::wregex(L"ab", std::regex_constants::extended)));
744 assert(m.size() == 0);
745 }
746 {
747 std::wcmatch m;
748 const wchar_t s[] = L"aab";
749 assert(!std::regex_match(s, m, std::wregex(L"ab", std::regex_constants::extended),
750 std::regex_constants::match_continuous));
751 assert(m.size() == 0);
752 }
753 {
754 std::wcmatch m;
755 const wchar_t s[] = L"abcd";
756 assert(!std::regex_match(s, m, std::wregex(L"bc", std::regex_constants::extended)));
757 assert(m.size() == 0);
758 }
759 {
760 std::wcmatch m;
761 const wchar_t s[] = L"abbc";
762 assert(std::regex_match(s, m, std::wregex(L"ab*c", std::regex_constants::extended)));
763 assert(m.size() == 1);
764 assert(!m.prefix().matched);
765 assert(m.prefix().first == s);
766 assert(m.prefix().second == m[0].first);
767 assert(!m.suffix().matched);
768 assert(m.suffix().first == m[0].second);
769 assert(m.suffix().second == s+4);
770 assert(m.length(0) == 4);
771 assert(m.position(0) == 0);
772 assert(m.str(0) == s);
773 }
774 {
775 std::wcmatch m;
776 const wchar_t s[] = L"ababc";
777 assert(std::regex_match(s, m, std::wregex(L"(ab)*c", std::regex_constants::extended)));
778 assert(m.size() == 2);
779 assert(!m.prefix().matched);
780 assert(m.prefix().first == s);
781 assert(m.prefix().second == m[0].first);
782 assert(!m.suffix().matched);
783 assert(m.suffix().first == m[0].second);
784 assert(m.suffix().second == s+5);
785 assert(m.length(0) == 5);
786 assert(m.position(0) == 0);
787 assert(m.str(0) == s);
788 assert(m.length(1) == 2);
789 assert(m.position(1) == 2);
790 assert(m.str(1) == L"ab");
791 }
792 {
793 std::wcmatch m;
794 const wchar_t s[] = L"abcdefghijk";
795 assert(!std::regex_match(s, m, std::wregex(L"cd((e)fg)hi",
796 std::regex_constants::extended)));
797 assert(m.size() == 0);
798 }
799 {
800 std::wcmatch m;
801 const wchar_t s[] = L"abc";
802 assert(std::regex_match(s, m, std::wregex(L"^abc", std::regex_constants::extended)));
803 assert(m.size() == 1);
804 assert(!m.prefix().matched);
805 assert(m.prefix().first == s);
806 assert(m.prefix().second == m[0].first);
807 assert(!m.suffix().matched);
808 assert(m.suffix().first == m[0].second);
809 assert(m.suffix().second == s+3);
810 assert(m.length(0) == 3);
811 assert(m.position(0) == 0);
812 assert(m.str(0) == s);
813 }
814 {
815 std::wcmatch m;
816 const wchar_t s[] = L"abcd";
817 assert(!std::regex_match(s, m, std::wregex(L"^abc", std::regex_constants::extended)));
818 assert(m.size() == 0);
819 }
820 {
821 std::wcmatch m;
822 const wchar_t s[] = L"aabc";
823 assert(!std::regex_match(s, m, std::wregex(L"^abc", std::regex_constants::extended)));
824 assert(m.size() == 0);
825 }
826 {
827 std::wcmatch m;
828 const wchar_t s[] = L"abc";
829 assert(std::regex_match(s, m, std::wregex(L"abc$", std::regex_constants::extended)));
830 assert(m.size() == 1);
831 assert(!m.prefix().matched);
832 assert(m.prefix().first == s);
833 assert(m.prefix().second == m[0].first);
834 assert(!m.suffix().matched);
835 assert(m.suffix().first == m[0].second);
836 assert(m.suffix().second == s+3);
837 assert(m.length(0) == 3);
838 assert(m.position(0) == 0);
839 assert(m.str(0) == s);
840 }
841 {
842 std::wcmatch m;
843 const wchar_t s[] = L"efabc";
844 assert(!std::regex_match(s, m, std::wregex(L"abc$", std::regex_constants::extended)));
845 assert(m.size() == 0);
846 }
847 {
848 std::wcmatch m;
849 const wchar_t s[] = L"efabcg";
850 assert(!std::regex_match(s, m, std::wregex(L"abc$", std::regex_constants::extended)));
851 assert(m.size() == 0);
852 }
853 {
854 std::wcmatch m;
855 const wchar_t s[] = L"abc";
856 assert(std::regex_match(s, m, std::wregex(L"a.c", std::regex_constants::extended)));
857 assert(m.size() == 1);
858 assert(!m.prefix().matched);
859 assert(m.prefix().first == s);
860 assert(m.prefix().second == m[0].first);
861 assert(!m.suffix().matched);
862 assert(m.suffix().first == m[0].second);
863 assert(m.suffix().second == s+3);
864 assert(m.length(0) == 3);
865 assert(m.position(0) == 0);
866 assert(m.str(0) == s);
867 }
868 {
869 std::wcmatch m;
870 const wchar_t s[] = L"acc";
871 assert(std::regex_match(s, m, std::wregex(L"a.c", std::regex_constants::extended)));
872 assert(m.size() == 1);
873 assert(!m.prefix().matched);
874 assert(m.prefix().first == s);
875 assert(m.prefix().second == m[0].first);
876 assert(!m.suffix().matched);
877 assert(m.suffix().first == m[0].second);
878 assert(m.suffix().second == s+3);
879 assert(m.length(0) == 3);
880 assert(m.position(0) == 0);
881 assert(m.str(0) == s);
882 }
883 {
884 std::wcmatch m;
885 const wchar_t s[] = L"acc";
886 assert(std::regex_match(s, m, std::wregex(L"a.c", std::regex_constants::extended)));
887 assert(m.size() == 1);
888 assert(!m.prefix().matched);
889 assert(m.prefix().first == s);
890 assert(m.prefix().second == m[0].first);
891 assert(!m.suffix().matched);
892 assert(m.suffix().first == m[0].second);
893 assert(m.suffix().second == s+3);
894 assert(m.length(0) == 3);
895 assert(m.position(0) == 0);
896 assert(m.str(0) == s);
897 }
898 {
899 std::wcmatch m;
900 const wchar_t s[] = L"abcdef";
901 assert(std::regex_match(s, m, std::wregex(L"(.*).*", std::regex_constants::extended)));
902 assert(m.size() == 2);
903 assert(!m.prefix().matched);
904 assert(m.prefix().first == s);
905 assert(m.prefix().second == m[0].first);
906 assert(!m.suffix().matched);
907 assert(m.suffix().first == m[0].second);
908 assert(m.suffix().second == s+6);
909 assert(m.length(0) == 6);
910 assert(m.position(0) == 0);
911 assert(m.str(0) == s);
912 assert(m.length(1) == 6);
913 assert(m.position(1) == 0);
914 assert(m.str(1) == s);
915 }
916 {
917 std::wcmatch m;
918 const wchar_t s[] = L"bc";
919 assert(!std::regex_match(s, m, std::wregex(L"(a*)*", std::regex_constants::extended)));
920 assert(m.size() == 0);
921 }
922 {
923 std::wcmatch m;
924 const wchar_t s[] = L"abbc";
925 assert(!std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::extended)));
926 assert(m.size() == 0);
927 }
928 {
929 std::wcmatch m;
930 const wchar_t s[] = L"abbbc";
931 assert(std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::extended)));
932 assert(m.size() == 1);
933 assert(!m.prefix().matched);
934 assert(m.prefix().first == s);
935 assert(m.prefix().second == m[0].first);
936 assert(!m.suffix().matched);
937 assert(m.suffix().first == m[0].second);
938 assert(m.suffix().second == m[0].second);
939 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
940 assert(m.position(0) == 0);
941 assert(m.str(0) == s);
942 }
943 {
944 std::wcmatch m;
945 const wchar_t s[] = L"abbbbc";
946 assert(std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::extended)));
947 assert(m.size() == 1);
948 assert(!m.prefix().matched);
949 assert(m.prefix().first == s);
950 assert(m.prefix().second == m[0].first);
951 assert(!m.suffix().matched);
952 assert(m.suffix().first == m[0].second);
953 assert(m.suffix().second == m[0].second);
954 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
955 assert(m.position(0) == 0);
956 assert(m.str(0) == s);
957 }
958 {
959 std::wcmatch m;
960 const wchar_t s[] = L"abbbbbc";
961 assert(std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::extended)));
962 assert(m.size() == 1);
963 assert(!m.prefix().matched);
964 assert(m.prefix().first == s);
965 assert(m.prefix().second == m[0].first);
966 assert(!m.suffix().matched);
967 assert(m.suffix().first == m[0].second);
968 assert(m.suffix().second == m[0].second);
969 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
970 assert(m.position(0) == 0);
971 assert(m.str(0) == s);
972 }
973 {
974 std::wcmatch m;
975 const wchar_t s[] = L"adefc";
976 assert(!std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::extended)));
977 assert(m.size() == 0);
978 }
979 {
980 std::wcmatch m;
981 const wchar_t s[] = L"abbbbbbc";
982 assert(!std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::extended)));
983 assert(m.size() == 0);
984 }
985 {
986 std::wcmatch m;
987 const wchar_t s[] = L"adec";
988 assert(!std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::extended)));
989 assert(m.size() == 0);
990 }
991 {
992 std::wcmatch m;
993 const wchar_t s[] = L"adefc";
994 assert(std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::extended)));
995 assert(m.size() == 1);
996 assert(!m.prefix().matched);
997 assert(m.prefix().first == s);
998 assert(m.prefix().second == m[0].first);
999 assert(!m.suffix().matched);
1000 assert(m.suffix().first == m[0].second);
1001 assert(m.suffix().second == m[0].second);
1002 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
1003 assert(m.position(0) == 0);
1004 assert(m.str(0) == s);
1005 }
1006 {
1007 std::wcmatch m;
1008 const wchar_t s[] = L"adefgc";
1009 assert(std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::extended)));
1010 assert(m.size() == 1);
1011 assert(!m.prefix().matched);
1012 assert(m.prefix().first == s);
1013 assert(m.prefix().second == m[0].first);
1014 assert(!m.suffix().matched);
1015 assert(m.suffix().first == m[0].second);
1016 assert(m.suffix().second == m[0].second);
1017 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
1018 assert(m.position(0) == 0);
1019 assert(m.str(0) == s);
1020 }
1021 {
1022 std::wcmatch m;
1023 const wchar_t s[] = L"adefghc";
1024 assert(std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::extended)));
1025 assert(m.size() == 1);
1026 assert(!m.prefix().matched);
1027 assert(m.prefix().first == s);
1028 assert(m.prefix().second == m[0].first);
1029 assert(!m.suffix().matched);
1030 assert(m.suffix().first == m[0].second);
1031 assert(m.suffix().second == m[0].second);
1032 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
1033 assert(m.position(0) == 0);
1034 assert(m.str(0) == s);
1035 }
1036 {
1037 std::wcmatch m;
1038 const wchar_t s[] = L"adefghic";
1039 assert(!std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::extended)));
1040 assert(m.size() == 0);
1041 }
1042 {
1043 std::wcmatch m;
1044 const wchar_t s[] = L"tournament";
1045 assert(std::regex_match(s, m, std::wregex(L"tour|to|tournament",
1046 std::regex_constants::extended)));
1047 assert(m.size() == 1);
1048 assert(!m.prefix().matched);
1049 assert(m.prefix().first == s);
1050 assert(m.prefix().second == m[0].first);
1051 assert(!m.suffix().matched);
1052 assert(m.suffix().first == m[0].second);
1053 assert(m.suffix().second == m[0].second);
1054 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
1055 assert(m.position(0) == 0);
1056 assert(m.str(0) == s);
1057 }
1058 {
1059 std::wcmatch m;
1060 const wchar_t s[] = L"tournamenttotour";
1061 assert(std::regex_match(s, m, std::wregex(L"(tour|to|tournament)+",
1062 std::regex_constants::extended | std::regex_constants::nosubs)));
1063 assert(m.size() == 1);
1064 assert(!m.prefix().matched);
1065 assert(m.prefix().first == s);
1066 assert(m.prefix().second == m[0].first);
1067 assert(!m.suffix().matched);
1068 assert(m.suffix().first == m[0].second);
1069 assert(m.suffix().second == m[0].second);
1070 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
1071 assert(m.position(0) == 0);
1072 assert(m.str(0) == s);
1073 }
1074 {
1075 std::wcmatch m;
1076 const wchar_t s[] = L"ttotour";
1077 assert(std::regex_match(s, m, std::wregex(L"(tour|to|t)+",
1078 std::regex_constants::extended)));
1079 assert(m.size() == 2);
1080 assert(!m.prefix().matched);
1081 assert(m.prefix().first == s);
1082 assert(m.prefix().second == m[0].first);
1083 assert(!m.suffix().matched);
1084 assert(m.suffix().first == m[0].second);
1085 assert(m.suffix().second == m[0].second);
1086 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
1087 assert(m.position(0) == 0);
1088 assert(m.str(0) == s);
1089 assert(m.length(1) == 4);
1090 assert(m.position(1) == 3);
1091 assert(m.str(1) == L"tour");
1092 }
1093 {
1094 std::wcmatch m;
1095 const wchar_t s[] = L"-ab,ab-";
1096 assert(!std::regex_match(s, m, std::wregex(L"-(.*),\1-", std::regex_constants::extended)));
1097 assert(m.size() == 0);
1098 }
1099 {
1100 std::wcmatch m;
1101 const wchar_t s[] = L"-ab,ab-";
1102 assert(std::regex_match(s, m, std::wregex(L"-.*,.*-", std::regex_constants::extended)));
1103 assert(m.size() == 1);
1104 assert(!m.prefix().matched);
1105 assert(m.prefix().first == s);
1106 assert(m.prefix().second == m[0].first);
1107 assert(!m.suffix().matched);
1108 assert(m.suffix().first == m[0].second);
1109 assert(m.suffix().second == m[0].second);
1110 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
1111 assert(m.position(0) == 0);
1112 assert(m.str(0) == s);
1113 }
1114 {
1115 std::wcmatch m;
1116 const wchar_t s[] = L"a";
1117 assert(std::regex_match(s, m, std::wregex(L"^[a]$",
1118 std::regex_constants::extended)));
1119 assert(m.size() == 1);
1120 assert(!m.prefix().matched);
1121 assert(m.prefix().first == s);
1122 assert(m.prefix().second == m[0].first);
1123 assert(!m.suffix().matched);
1124 assert(m.suffix().first == m[0].second);
1125 assert(m.suffix().second == m[0].second);
1126 assert(m.length(0) == 1);
1127 assert(m.position(0) == 0);
1128 assert(m.str(0) == L"a");
1129 }
1130 {
1131 std::wcmatch m;
1132 const wchar_t s[] = L"a";
1133 assert(std::regex_match(s, m, std::wregex(L"^[ab]$",
1134 std::regex_constants::extended)));
1135 assert(m.size() == 1);
1136 assert(!m.prefix().matched);
1137 assert(m.prefix().first == s);
1138 assert(m.prefix().second == m[0].first);
1139 assert(!m.suffix().matched);
1140 assert(m.suffix().first == m[0].second);
1141 assert(m.suffix().second == m[0].second);
1142 assert(m.length(0) == 1);
1143 assert(m.position(0) == 0);
1144 assert(m.str(0) == L"a");
1145 }
1146 {
1147 std::wcmatch m;
1148 const wchar_t s[] = L"c";
1149 assert(std::regex_match(s, m, std::wregex(L"^[a-f]$",
1150 std::regex_constants::extended)));
1151 assert(m.size() == 1);
1152 assert(!m.prefix().matched);
1153 assert(m.prefix().first == s);
1154 assert(m.prefix().second == m[0].first);
1155 assert(!m.suffix().matched);
1156 assert(m.suffix().first == m[0].second);
1157 assert(m.suffix().second == m[0].second);
1158 assert(m.length(0) == 1);
1159 assert(m.position(0) == 0);
1160 assert(m.str(0) == s);
1161 }
1162 {
1163 std::wcmatch m;
1164 const wchar_t s[] = L"g";
1165 assert(!std::regex_match(s, m, std::wregex(L"^[a-f]$",
1166 std::regex_constants::extended)));
1167 assert(m.size() == 0);
1168 }
1169 {
1170 std::wcmatch m;
1171 const wchar_t s[] = L"Iraqi";
1172 assert(!std::regex_match(s, m, std::wregex(L"q[^u]",
1173 std::regex_constants::extended)));
1174 assert(m.size() == 0);
1175 }
1176 {
1177 std::wcmatch m;
1178 const wchar_t s[] = L"Iraq";
1179 assert(!std::regex_match(s, m, std::wregex(L"q[^u]",
1180 std::regex_constants::extended)));
1181 assert(m.size() == 0);
1182 }
1183 {
1184 std::wcmatch m;
1185 const wchar_t s[] = L"AmB";
1186 assert(std::regex_match(s, m, std::wregex(L"A[[:lower:]]B",
1187 std::regex_constants::extended)));
1188 assert(m.size() == 1);
1189 assert(!m.prefix().matched);
1190 assert(m.prefix().first == s);
1191 assert(m.prefix().second == m[0].first);
1192 assert(!m.suffix().matched);
1193 assert(m.suffix().first == m[0].second);
1194 assert(m.suffix().second == m[0].second);
1195 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
1196 assert(m.position(0) == 0);
1197 assert(m.str(0) == s);
1198 }
1199 {
1200 std::wcmatch m;
1201 const wchar_t s[] = L"AMB";
1202 assert(!std::regex_match(s, m, std::wregex(L"A[[:lower:]]B",
1203 std::regex_constants::extended)));
1204 assert(m.size() == 0);
1205 }
1206 {
1207 std::wcmatch m;
1208 const wchar_t s[] = L"AMB";
1209 assert(std::regex_match(s, m, std::wregex(L"A[^[:lower:]]B",
1210 std::regex_constants::extended)));
1211 assert(m.size() == 1);
1212 assert(!m.prefix().matched);
1213 assert(m.prefix().first == s);
1214 assert(m.prefix().second == m[0].first);
1215 assert(!m.suffix().matched);
1216 assert(m.suffix().first == m[0].second);
1217 assert(m.suffix().second == m[0].second);
1218 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
1219 assert(m.position(0) == 0);
1220 assert(m.str(0) == s);
1221 }
1222 {
1223 std::wcmatch m;
1224 const wchar_t s[] = L"AmB";
1225 assert(!std::regex_match(s, m, std::wregex(L"A[^[:lower:]]B",
1226 std::regex_constants::extended)));
1227 assert(m.size() == 0);
1228 }
1229 {
1230 std::wcmatch m;
1231 const wchar_t s[] = L"A5B";
1232 assert(!std::regex_match(s, m, std::wregex(L"A[^[:lower:]0-9]B",
1233 std::regex_constants::extended)));
1234 assert(m.size() == 0);
1235 }
1236 {
1237 std::wcmatch m;
1238 const wchar_t s[] = L"A?B";
1239 assert(std::regex_match(s, m, std::wregex(L"A[^[:lower:]0-9]B",
1240 std::regex_constants::extended)));
1241 assert(m.size() == 1);
1242 assert(!m.prefix().matched);
1243 assert(m.prefix().first == s);
1244 assert(m.prefix().second == m[0].first);
1245 assert(!m.suffix().matched);
1246 assert(m.suffix().first == m[0].second);
1247 assert(m.suffix().second == m[0].second);
1248 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
1249 assert(m.position(0) == 0);
1250 assert(m.str(0) == s);
1251 }
1252 {
1253 std::wcmatch m;
1254 const wchar_t s[] = L"-";
1255 assert(std::regex_match(s, m, std::wregex(L"[a[.hyphen.]z]",
1256 std::regex_constants::extended)));
1257 assert(m.size() == 1);
1258 assert(!m.prefix().matched);
1259 assert(m.prefix().first == s);
1260 assert(m.prefix().second == m[0].first);
1261 assert(!m.suffix().matched);
1262 assert(m.suffix().first == m[0].second);
1263 assert(m.suffix().second == m[0].second);
1264 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
1265 assert(m.position(0) == 0);
1266 assert(m.str(0) == s);
1267 }
1268 {
1269 std::wcmatch m;
1270 const wchar_t s[] = L"z";
1271 assert(std::regex_match(s, m, std::wregex(L"[a[.hyphen.]z]",
1272 std::regex_constants::extended)));
1273 assert(m.size() == 1);
1274 assert(!m.prefix().matched);
1275 assert(m.prefix().first == s);
1276 assert(m.prefix().second == m[0].first);
1277 assert(!m.suffix().matched);
1278 assert(m.suffix().first == m[0].second);
1279 assert(m.suffix().second == m[0].second);
1280 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
1281 assert(m.position(0) == 0);
1282 assert(m.str(0) == s);
1283 }
1284 {
1285 std::wcmatch m;
1286 const wchar_t s[] = L"m";
1287 assert(!std::regex_match(s, m, std::wregex(L"[a[.hyphen.]z]",
1288 std::regex_constants::extended)));
1289 assert(m.size() == 0);
1290 }
1291 std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
1292 {
1293 std::wcmatch m;
1294 const wchar_t s[] = L"m";
1295 assert(std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
1296 std::regex_constants::extended)));
1297 assert(m.size() == 1);
1298 assert(!m.prefix().matched);
1299 assert(m.prefix().first == s);
1300 assert(m.prefix().second == m[0].first);
1301 assert(!m.suffix().matched);
1302 assert(m.suffix().first == m[0].second);
1303 assert(m.suffix().second == m[0].second);
1304 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
1305 assert(m.position(0) == 0);
1306 assert(m.str(0) == s);
1307 }
1308 {
1309 std::wcmatch m;
1310 const wchar_t s[] = L"Ch";
1311 assert(std::regex_match(s, m, std::wregex(L"[a[.ch.]z]",
1312 std::regex_constants::extended | std::regex_constants::icase)));
1313 assert(m.size() == 1);
1314 assert(!m.prefix().matched);
1315 assert(m.prefix().first == s);
1316 assert(m.prefix().second == m[0].first);
1317 assert(!m.suffix().matched);
1318 assert(m.suffix().first == m[0].second);
1319 assert(m.suffix().second == m[0].second);
1320 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
1321 assert(m.position(0) == 0);
1322 assert(m.str(0) == s);
1323 }
1324 std::locale::global(std::locale("C"));
1325 {
1326 std::wcmatch m;
1327 const wchar_t s[] = L"m";
1328 assert(!std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
1329 std::regex_constants::extended)));
1330 assert(m.size() == 0);
1331 }
1332 {
1333 std::wcmatch m;
1334 const wchar_t s[] = L"01a45cef9";
1335 assert(!std::regex_match(s, m, std::wregex(L"[ace1-9]*",
1336 std::regex_constants::extended)));
1337 assert(m.size() == 0);
1338 }
1339 {
1340 std::wcmatch m;
1341 const wchar_t s[] = L"01a45cef9";
1342 assert(!std::regex_match(s, m, std::wregex(L"[ace1-9]+",
1343 std::regex_constants::extended)));
1344 assert(m.size() == 0);
1345 }
1346 {
1347 const wchar_t r[] = L"^[-+]?[0-9]+[CF]$";
1348 std::ptrdiff_t sr = std::char_traits<wchar_t>::length(r);
1349 typedef forward_iterator<const wchar_t*> FI;
1350 typedef bidirectional_iterator<const wchar_t*> BI;
1351 std::wregex regex(FI(r), FI(r+sr), std::regex_constants::extended);
1352 std::match_results<BI> m;
1353 const wchar_t s[] = L"-40C";
1354 std::ptrdiff_t ss = std::char_traits<wchar_t>::length(s);
1355 assert(std::regex_match(BI(s), BI(s+ss), m, regex));
1356 assert(m.size() == 1);
1357 assert(!m.prefix().matched);
1358 assert(m.prefix().first == BI(s));
1359 assert(m.prefix().second == m[0].first);
1360 assert(!m.suffix().matched);
1361 assert(m.suffix().first == m[0].second);
1362 assert(m.suffix().second == m[0].second);
1363 assert(m.length(0) == 4);
1364 assert(m.position(0) == 0);
1365 assert(m.str(0) == s);
1366 }
1367 }
1368