| // 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 <string> |
| #include <vector> |
| |
| #include "util/test.h" |
| #include "re2/testing/exhaustive_tester.h" |
| |
| DECLARE_string(regexp_engines); |
| |
| namespace re2 { |
| |
| // Test simple repetition operators |
| TEST(Repetition, Simple) { |
| std::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) { |
| std::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 (FLAGS_regexp_engines.find("PCRE") == string::npos) |
| ExhaustiveTest(3, 2, Split(" ", "a (a)"), ops, |
| 50, Explode("a"), "(?:%s)", ""); |
| } |
| |
| } // namespace re2 |