diff options
Diffstat (limited to 're2/testing/exhaustive1_test.cc')
-rw-r--r-- | re2/testing/exhaustive1_test.cc | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/re2/testing/exhaustive1_test.cc b/re2/testing/exhaustive1_test.cc new file mode 100644 index 0000000..9e057cc --- /dev/null +++ b/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 + |