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 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 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 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 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