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 
13 namespace re2 {
14 
TEST(Set,Unanchored)15 TEST(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 
TEST(Set,UnanchoredFactored)41 TEST(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 
TEST(Set,UnanchoredDollar)72 TEST(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 
TEST(Set,Anchored)84 TEST(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