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