1 // Copyright 2008 The RE2 Authors. All Rights Reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // Exhaustive testing of regular expression matching.
6
7 #include <string>
8 #include <vector>
9
10 #include "util/test.h"
11 #include "re2/testing/exhaustive_tester.h"
12
13 DECLARE_string(regexp_engines);
14
15 namespace re2 {
16
17 // Test simple repetition operators
TEST(Repetition,Simple)18 TEST(Repetition, Simple) {
19 std::vector<string> ops = Split(" ",
20 "%s{0} %s{0,} %s{1} %s{1,} %s{0,1} %s{0,2} "
21 "%s{1,2} %s{2} %s{2,} %s{3,4} %s{4,5} "
22 "%s* %s+ %s? %s*? %s+? %s??");
23 ExhaustiveTest(3, 2, Explode("abc."), ops,
24 6, Explode("ab"), "(?:%s)", "");
25 ExhaustiveTest(3, 2, Explode("abc."), ops,
26 40, Explode("a"), "(?:%s)", "");
27 }
28
29 // Test capturing parens -- (a) -- inside repetition operators
TEST(Repetition,Capturing)30 TEST(Repetition, Capturing) {
31 std::vector<string> ops = Split(" ",
32 "%s{0} %s{0,} %s{1} %s{1,} %s{0,1} %s{0,2} "
33 "%s{1,2} %s{2} %s{2,} %s{3,4} %s{4,5} "
34 "%s* %s+ %s? %s*? %s+? %s??");
35 ExhaustiveTest(3, 2, Split(" ", "a (a) b"), ops,
36 7, Explode("ab"), "(?:%s)", "");
37
38 // This would be a great test, but it runs forever when PCRE is enabled.
39 if (FLAGS_regexp_engines.find("PCRE") == string::npos)
40 ExhaustiveTest(3, 2, Split(" ", "a (a)"), ops,
41 50, Explode("a"), "(?:%s)", "");
42 }
43
44 } // namespace re2
45