blob: 9e057cc56ecaae66f2a7d7d6fbdd2788f81ae69e [file] [log] [blame]
Alexander Gutkin0d4c5232013-02-28 13:47:27 +00001// 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 "util/test.h"
8#include "re2/testing/exhaustive_tester.h"
9
10DECLARE_string(regexp_engines);
11
12namespace re2 {
13
14// Test simple repetition operators
15TEST(Repetition, Simple) {
16 vector<string> ops = Split(" ",
17 "%s{0} %s{0,} %s{1} %s{1,} %s{0,1} %s{0,2} "
18 "%s{1,2} %s{2} %s{2,} %s{3,4} %s{4,5} "
19 "%s* %s+ %s? %s*? %s+? %s??");
20 ExhaustiveTest(3, 2, Explode("abc."), ops,
21 6, Explode("ab"), "(?:%s)", "");
22 ExhaustiveTest(3, 2, Explode("abc."), ops,
23 40, Explode("a"), "(?:%s)", "");
24}
25
26// Test capturing parens -- (a) -- inside repetition operators
27TEST(Repetition, Capturing) {
28 vector<string> ops = Split(" ",
29 "%s{0} %s{0,} %s{1} %s{1,} %s{0,1} %s{0,2} "
30 "%s{1,2} %s{2} %s{2,} %s{3,4} %s{4,5} "
31 "%s* %s+ %s? %s*? %s+? %s??");
32 ExhaustiveTest(3, 2, Split(" ", "a (a) b"), ops,
33 7, Explode("ab"), "(?:%s)", "");
34
35 // This would be a great test, but it runs forever when PCRE is enabled.
36 if (strstr("PCRE", FLAGS_regexp_engines.c_str()) == NULL)
37 ExhaustiveTest(4, 3, Split(" ", "a (a)"), ops,
38 100, Explode("a"), "(?:%s)", "");
39}
40
41} // namespace re2
42