]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/regex/test/regress/test_backrefs.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 TEST_INVALID_REGEX("a(b)\\2c", perl
);
22 TEST_INVALID_REGEX("a(b\\1)c", perl
);
23 TEST_REGEX_SEARCH("a(b*)c\\1d", perl
, "abbcbbd", match_default
, make_array(0, 7, 1, 3, -2, -2));
24 TEST_REGEX_SEARCH("a(b*)c\\1d", perl
, "abbcbd", match_default
, make_array(-2, -2));
25 TEST_REGEX_SEARCH("a(b*)c\\1d", perl
, "abbcbbbd", match_default
, make_array(-2, -2));
26 TEST_REGEX_SEARCH("^(.)\\1", perl
, "abc", match_default
, make_array(-2, -2));
27 TEST_REGEX_SEARCH("a([bc])\\1d", perl
, "abcdabbd", match_default
, make_array(4, 8, 5, 6, -2, -2));
28 TEST_REGEX_SEARCH("a\\([bc]\\)\\1d", basic
, "abcdabbd", match_default
, make_array(4, 8, 5, 6, -2, -2));
29 // strictly speaking this is at best ambiguous, at worst wrong, this is what most
30 // re implimentations will match though.
31 TEST_REGEX_SEARCH("a(([bc])\\2)*d", perl
, "abbccd", match_default
, make_array(0, 6, 3, 5, 3, 4, -2, -2));
32 TEST_REGEX_SEARCH("a(([bc])\\2)*d", perl
, "abbcbd", match_default
, make_array(-2, -2));
33 TEST_REGEX_SEARCH("a((b)*\\2)*d", perl
, "abbbd", match_default
, make_array(0, 5, 1, 4, 2, 3, -2, -2));
34 TEST_REGEX_SEARCH("(ab*)[ab]*\\1", perl
, "ababaaa", match_default
, make_array(0, 4, 0, 2, -2, 4, 7, 4, 5, -2, -2));
35 TEST_REGEX_SEARCH("(a)\\1bcd", perl
, "aabcd", match_default
, make_array(0, 5, 0, 1, -2, -2));
36 TEST_REGEX_SEARCH("(a)\\1bc*d", perl
, "aabcd", match_default
, make_array(0, 5, 0, 1, -2, -2));
37 TEST_REGEX_SEARCH("(a)\\1bc*d", perl
, "aabd", match_default
, make_array(0, 4, 0, 1, -2, -2));
38 TEST_REGEX_SEARCH("(a)\\1bc*d", perl
, "aabcccd", match_default
, make_array(0, 7, 0, 1, -2, -2));
39 TEST_REGEX_SEARCH("(a)\\1bc*[ce]d", perl
, "aabcccd", match_default
, make_array(0, 7, 0, 1, -2, -2));
40 TEST_REGEX_SEARCH("^(a)\\1b(c)*cd$", perl
, "aabcccd", match_default
, make_array(0, 7, 0, 1, 4, 5, -2, -2));
41 TEST_REGEX_SEARCH("a\\(b*\\)c\\1d", basic
, "abbcbbd", match_default
, make_array(0, 7, 1, 3, -2, -2));
42 TEST_REGEX_SEARCH("a\\(b*\\)c\\1d", basic
, "abbcbd", match_default
, make_array(-2, -2));
43 TEST_REGEX_SEARCH("a\\(b*\\)c\\1d", basic
, "abbcbbbd", match_default
, make_array(-2, -2));
44 TEST_REGEX_SEARCH("^\\(.\\)\\1", basic
, "abc", match_default
, make_array(-2, -2));
45 TEST_REGEX_SEARCH("a\\([bc]\\)\\1d", basic
, "abcdabbd", match_default
, make_array(4, 8, 5, 6, -2, -2));
46 // strictly speaking this is at best ambiguous, at worst wrong, this is what most
47 // re implimentations will match though.
48 TEST_REGEX_SEARCH("a\\(\\([bc]\\)\\2\\)*d", basic
, "abbccd", match_default
, make_array(0, 6, 3, 5, 3, 4, -2, -2));
49 TEST_REGEX_SEARCH("a\\(\\([bc]\\)\\2\\)*d", basic
, "abbcbd", match_default
, make_array(-2, -2));
50 TEST_REGEX_SEARCH("a\\(\\(b\\)*\\2\\)*d", basic
, "abbbd", match_default
, make_array(0, 5, 1, 4, 2, 3, -2, -2));
51 TEST_REGEX_SEARCH("\\(a\\)\\1bcd", basic
, "aabcd", match_default
, make_array(0, 5, 0, 1, -2, -2));
52 TEST_REGEX_SEARCH("\\(a\\)\\1bc*d", basic
, "aabcd", match_default
, make_array(0, 5, 0, 1, -2, -2));
53 TEST_REGEX_SEARCH("\\(a\\)\\1bc*d", basic
, "aabd", match_default
, make_array(0, 4, 0, 1, -2, -2));
54 TEST_REGEX_SEARCH("\\(a\\)\\1bc*d", basic
, "aabcccd", match_default
, make_array(0, 7, 0, 1, -2, -2));
55 TEST_REGEX_SEARCH("\\(a\\)\\1bc*[ce]d", basic
, "aabcccd", match_default
, make_array(0, 7, 0, 1, -2, -2));
56 TEST_REGEX_SEARCH("^\\(a\\)\\1b\\(c\\)*cd$", basic
, "aabcccd", match_default
, make_array(0, 7, 0, 1, 4, 5, -2, -2));
57 TEST_REGEX_SEARCH("\\(ab*\\)[ab]*\\1", basic
, "ababaaa", match_default
, make_array(0, 7, 0, 1, -2, -2));
59 // Now test the \g version:
61 TEST_INVALID_REGEX("a(b)\\g2c", perl
);
62 TEST_INVALID_REGEX("a(b\\g1)c", perl
);
63 TEST_INVALID_REGEX("a(b\\g0)c", perl
);
64 TEST_REGEX_SEARCH("a(b*)c\\g1d", perl
, "abbcbbd", match_default
, make_array(0, 7, 1, 3, -2, -2));
65 TEST_REGEX_SEARCH("a(b*)c\\g1d", perl
, "abbcbd", match_default
, make_array(-2, -2));
66 TEST_REGEX_SEARCH("a(b*)c\\g1d", perl
, "abbcbbbd", match_default
, make_array(-2, -2));
67 TEST_REGEX_SEARCH("^(.)\\g1", perl
, "abc", match_default
, make_array(-2, -2));
68 TEST_REGEX_SEARCH("a([bc])\\g1d", perl
, "abcdabbd", match_default
, make_array(4, 8, 5, 6, -2, -2));
69 TEST_INVALID_REGEX("a(b)\\g{2}c", perl
);
70 TEST_INVALID_REGEX("a(b\\g{1})c", perl
);
71 TEST_INVALID_REGEX("a(b\\g{0})c", perl
);
72 TEST_REGEX_SEARCH("a(b*)c\\g{1}d", perl
, "abbcbbd", match_default
, make_array(0, 7, 1, 3, -2, -2));
73 TEST_REGEX_SEARCH("a(b*)c\\g{1}d", perl
, "abbcbd", match_default
, make_array(-2, -2));
74 TEST_REGEX_SEARCH("a(b*)c\\g{1}d", perl
, "abbcbbbd", match_default
, make_array(-2, -2));
75 TEST_REGEX_SEARCH("^(.)\\g{1}", perl
, "abc", match_default
, make_array(-2, -2));
76 TEST_REGEX_SEARCH("a([bc])\\g{1}d", perl
, "abcdabbd", match_default
, make_array(4, 8, 5, 6, -2, -2));
77 // And again but with negative indexes:
78 TEST_INVALID_REGEX("a(b)\\g-2c", perl
);
79 TEST_INVALID_REGEX("a(b\\g-1)c", perl
);
80 TEST_INVALID_REGEX("a(b\\g-0)c", perl
);
81 TEST_REGEX_SEARCH("a(b*)c\\g-1d", perl
, "abbcbbd", match_default
, make_array(0, 7, 1, 3, -2, -2));
82 TEST_REGEX_SEARCH("a(b*)c\\g-1d", perl
, "abbcbd", match_default
, make_array(-2, -2));
83 TEST_REGEX_SEARCH("a(b*)c\\g-1d", perl
, "abbcbbbd", match_default
, make_array(-2, -2));
84 TEST_REGEX_SEARCH("^(.)\\g1", perl
, "abc", match_default
, make_array(-2, -2));
85 TEST_REGEX_SEARCH("a([bc])\\g1d", perl
, "abcdabbd", match_default
, make_array(4, 8, 5, 6, -2, -2));
86 TEST_INVALID_REGEX("a(b)\\g{-2}c", perl
);
87 TEST_INVALID_REGEX("a(b\\g{-1})c", perl
);
88 TEST_REGEX_SEARCH("a(b*)c\\g{-1}d", perl
, "abbcbbd", match_default
, make_array(0, 7, 1, 3, -2, -2));
89 TEST_REGEX_SEARCH("a(b*)c\\g{-1}d", perl
, "abbcbd", match_default
, make_array(-2, -2));
90 TEST_REGEX_SEARCH("a(b*)c\\g{-1}d", perl
, "abbcbbbd", match_default
, make_array(-2, -2));
91 TEST_REGEX_SEARCH("^(.)\\g{-1}", perl
, "abc", match_default
, make_array(-2, -2));
92 TEST_REGEX_SEARCH("a([bc])\\g{-1}d", perl
, "abcdabbd", match_default
, make_array(4, 8, 5, 6, -2, -2));
94 // And again but with named subexpressions:
95 TEST_REGEX_SEARCH("a(?<foo>(?<bar>(?<bb>(?<aa>b*))))c\\g{foo}d", perl
, "abbcbbd", match_default
, make_array(0, 7, 1, 3, 1, 3, 1, 3, 1, 3, -2, -2));
96 TEST_REGEX_SEARCH("a(?<foo>(?<bar>(?<bb>(?<aa>b*))))c\\g{foo}d", perl
, "abbcbd", match_default
, make_array(-2, -2));
97 TEST_REGEX_SEARCH("a(?<foo>(?<bar>(?<bb>(?<aa>b*))))c\\g{foo}d", perl
, "abbcbbbd", match_default
, make_array(-2, -2));
98 TEST_REGEX_SEARCH("^(?<foo>.)\\g{foo}", perl
, "abc", match_default
, make_array(-2, -2));
99 TEST_REGEX_SEARCH("a(?<foo>[bc])\\g{foo}d", perl
, "abcdabbd", match_default
, make_array(4, 8, 5, 6, -2, -2));
101 TEST_REGEX_SEARCH("a(?'foo'(?'bar'(?'bb'(?'aa'b*))))c\\g{foo}d", perl
, "abbcbbd", match_default
, make_array(0, 7, 1, 3, 1, 3, 1, 3, 1, 3, -2, -2));
102 TEST_REGEX_SEARCH("a(?'foo'(?'bar'(?'bb'(?'aa'b*))))c\\g{foo}d", perl
, "abbcbd", match_default
, make_array(-2, -2));
103 TEST_REGEX_SEARCH("a(?'foo'(?'bar'(?'bb'(?'aa'b*))))c\\g{foo}d", perl
, "abbcbbbd", match_default
, make_array(-2, -2));
104 TEST_REGEX_SEARCH("^(?'foo'.)\\g{foo}", perl
, "abc", match_default
, make_array(-2, -2));
105 TEST_REGEX_SEARCH("a(?'foo'[bc])\\g{foo}d", perl
, "abcdabbd", match_default
, make_array(4, 8, 5, 6, -2, -2));