1// 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 <string>
8#include <vector>
9
10#include "util/test.h"
11#include "re2/testing/exhaustive_tester.h"
12
13namespace re2 {
14
15// Test simple repetition operators
16TEST(Repetition, Simple) {
17 std::vector<std::string> ops = Split(" ",
18 "%s{0} %s{0,} %s{1} %s{1,} %s{0,1} %s{0,2} "
19 "%s{1,2} %s{2} %s{2,} %s{3,4} %s{4,5} "
20 "%s* %s+ %s? %s*? %s+? %s??");
21 ExhaustiveTest(3, 2, Explode("abc."), ops,
22 6, Explode("ab"), "(?:%s)", "");
23 ExhaustiveTest(3, 2, Explode("abc."), ops,
24 40, Explode("a"), "(?:%s)", "");
25}
26
27// Test capturing parens -- (a) -- inside repetition operators
28TEST(Repetition, Capturing) {
29 std::vector<std::string> ops = Split(" ",
30 "%s{0} %s{0,} %s{1} %s{1,} %s{0,1} %s{0,2} "
31 "%s{1,2} %s{2} %s{2,} %s{3,4} %s{4,5} "
32 "%s* %s+ %s? %s*? %s+? %s??");
33 ExhaustiveTest(3, 2, Split(" ", "a (a) b"), ops,
34 7, Explode("ab"), "(?:%s)", "");
35 ExhaustiveTest(3, 2, Split(" ", "a (a)"), ops,
36 50, Explode("a"), "(?:%s)", "");
37}
38
39} // namespace re2
40