Home | History | Annotate | Download | only in testing
      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