Index: third_party/re2/re2/testing/exhaustive1_test.cc |
diff --git a/third_party/re2/re2/testing/exhaustive1_test.cc b/third_party/re2/re2/testing/exhaustive1_test.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9e057cc56ecaae66f2a7d7d6fbdd2788f81ae69e |
--- /dev/null |
+++ b/third_party/re2/re2/testing/exhaustive1_test.cc |
@@ -0,0 +1,42 @@ |
+// Copyright 2008 The RE2 Authors. All Rights Reserved. |
+// Use of this source code is governed by a BSD-style |
+// license that can be found in the LICENSE file. |
+ |
+// Exhaustive testing of regular expression matching. |
+ |
+#include "util/test.h" |
+#include "re2/testing/exhaustive_tester.h" |
+ |
+DECLARE_string(regexp_engines); |
+ |
+namespace re2 { |
+ |
+// Test simple repetition operators |
+TEST(Repetition, Simple) { |
+ vector<string> ops = Split(" ", |
+ "%s{0} %s{0,} %s{1} %s{1,} %s{0,1} %s{0,2} " |
+ "%s{1,2} %s{2} %s{2,} %s{3,4} %s{4,5} " |
+ "%s* %s+ %s? %s*? %s+? %s??"); |
+ ExhaustiveTest(3, 2, Explode("abc."), ops, |
+ 6, Explode("ab"), "(?:%s)", ""); |
+ ExhaustiveTest(3, 2, Explode("abc."), ops, |
+ 40, Explode("a"), "(?:%s)", ""); |
+} |
+ |
+// Test capturing parens -- (a) -- inside repetition operators |
+TEST(Repetition, Capturing) { |
+ vector<string> ops = Split(" ", |
+ "%s{0} %s{0,} %s{1} %s{1,} %s{0,1} %s{0,2} " |
+ "%s{1,2} %s{2} %s{2,} %s{3,4} %s{4,5} " |
+ "%s* %s+ %s? %s*? %s+? %s??"); |
+ ExhaustiveTest(3, 2, Split(" ", "a (a) b"), ops, |
+ 7, Explode("ab"), "(?:%s)", ""); |
+ |
+ // This would be a great test, but it runs forever when PCRE is enabled. |
+ if (strstr("PCRE", FLAGS_regexp_engines.c_str()) == NULL) |
+ ExhaustiveTest(4, 3, Split(" ", "a (a)"), ops, |
+ 100, Explode("a"), "(?:%s)", ""); |
+} |
+ |
+} // namespace re2 |
+ |