15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2010 The RE2 Authors. All Rights Reserved. 2558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// Use of this source code is governed by a BSD-style 3558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// license that can be found in the LICENSE file. 4558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <sys/types.h> 6558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include <sys/stat.h> 7558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include <vector> 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "util/test.h" 10558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "re2/re2.h" 11558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "re2/set.h" 12558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 13558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochnamespace re2 { 14558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 15d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochTEST(Set, Unanchored) { 16558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch RE2::Set s(RE2::DefaultOptions, RE2::UNANCHORED); 17d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 18558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(s.Add("foo", NULL), 0); 19558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(s.Add("(", NULL), -1); 20558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(s.Add("bar", NULL), 1); 21558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 22558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(s.Compile(), true); 23d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 24d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch vector<int> v; 25d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch CHECK_EQ(s.Match("foobar", &v), true); 26d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch CHECK_EQ(v.size(), 2); 27d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch CHECK_EQ(v[0], 0); 28558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(v[1], 1); 29558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 30558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch v.clear(); 31d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch CHECK_EQ(s.Match("fooba", &v), true); 32558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(v.size(), 1); 33558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(v[0], 0); 34558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 35558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch v.clear(); 36558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(s.Match("oobar", &v), true); 37558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(v.size(), 1); 38d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch CHECK_EQ(v[0], 1); 39558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 40558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 41558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST(Set, UnanchoredFactored) { 42558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch RE2::Set s(RE2::DefaultOptions, RE2::UNANCHORED); 43558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 44558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(s.Add("foo", NULL), 0); 45558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(s.Add("(", NULL), -1); 46558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(s.Add("foobar", NULL), 1); 47558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 48558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(s.Compile(), true); 49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch vector<int> v; 51558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(s.Match("foobar", &v), true); 52558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(v.size(), 2); 53558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(v[0], 0); 54558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(v[1], 1); 55558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) v.clear(); 57558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CHECK_EQ(s.Match("obarfoobaroo", &v), true); 58558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 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