set_test.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
1// Copyright 2010 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#include <sys/types.h>
6#include <sys/stat.h>
7#include <vector>
8
9#include "util/test.h"
10#include "re2/re2.h"
11#include "re2/set.h"
12
13namespace re2 {
14
15TEST(Set, Unanchored) {
16  RE2::Set s(RE2::DefaultOptions, RE2::UNANCHORED);
17
18  CHECK_EQ(s.Add("foo", NULL), 0);
19  CHECK_EQ(s.Add("(", NULL), -1);
20  CHECK_EQ(s.Add("bar", NULL), 1);
21
22  CHECK_EQ(s.Compile(), true);
23
24  vector<int> v;
25  CHECK_EQ(s.Match("foobar", &v), true);
26  CHECK_EQ(v.size(), 2);
27  CHECK_EQ(v[0], 0);
28  CHECK_EQ(v[1], 1);
29
30  v.clear();
31  CHECK_EQ(s.Match("fooba", &v), true);
32  CHECK_EQ(v.size(), 1);
33  CHECK_EQ(v[0], 0);
34
35  v.clear();
36  CHECK_EQ(s.Match("oobar", &v), true);
37  CHECK_EQ(v.size(), 1);
38  CHECK_EQ(v[0], 1);
39}
40
41TEST(Set, UnanchoredFactored) {
42  RE2::Set s(RE2::DefaultOptions, RE2::UNANCHORED);
43
44  CHECK_EQ(s.Add("foo", NULL), 0);
45  CHECK_EQ(s.Add("(", NULL), -1);
46  CHECK_EQ(s.Add("foobar", NULL), 1);
47
48  CHECK_EQ(s.Compile(), true);
49
50  vector<int> v;
51  CHECK_EQ(s.Match("foobar", &v), true);
52  CHECK_EQ(v.size(), 2);
53  CHECK_EQ(v[0], 0);
54  CHECK_EQ(v[1], 1);
55
56  v.clear();
57  CHECK_EQ(s.Match("obarfoobaroo", &v), true);
58  CHECK_EQ(v.size(), 2);
59  CHECK_EQ(v[0], 0);
60  CHECK_EQ(v[1], 1);
61
62  v.clear();
63  CHECK_EQ(s.Match("fooba", &v), true);
64  CHECK_EQ(v.size(), 1);
65  CHECK_EQ(v[0], 0);
66
67  v.clear();
68  CHECK_EQ(s.Match("oobar", &v), false);
69  CHECK_EQ(v.size(), 0);
70}
71
72TEST(Set, UnanchoredDollar) {
73  RE2::Set s(RE2::DefaultOptions, RE2::UNANCHORED);
74
75  CHECK_EQ(s.Add("foo$", NULL), 0);
76  CHECK_EQ(s.Compile(), true);
77
78  vector<int> v;
79  CHECK_EQ(s.Match("foo", &v), true);
80  CHECK_EQ(v.size(), 1);
81  CHECK_EQ(v[0], 0);
82}
83
84TEST(Set, Anchored) {
85  RE2::Set s(RE2::DefaultOptions, RE2::ANCHOR_BOTH);
86
87  CHECK_EQ(s.Add("foo", NULL), 0);
88  CHECK_EQ(s.Add("(", NULL), -1);
89  CHECK_EQ(s.Add("bar", NULL), 1);
90
91  CHECK_EQ(s.Compile(), true);
92
93  vector<int> v;
94  CHECK_EQ(s.Match("foobar", &v), false);
95  CHECK_EQ(v.size(), 0);
96
97  CHECK_EQ(s.Match("fooba", &v), false);
98  CHECK_EQ(v.size(), 0);
99
100  CHECK_EQ(s.Match("oobar", &v), false);
101  CHECK_EQ(v.size(), 0);
102
103  CHECK_EQ(s.Match("foo", &v), true);
104  CHECK_EQ(v.size(), 1);
105  CHECK_EQ(v[0], 0);
106
107  CHECK_EQ(s.Match("bar", &v), true);
108  CHECK_EQ(v.size(), 1);
109  CHECK_EQ(v[0], 1);
110
111}
112
113}  // namespace re2
114
115