diff options
author | David Neto <dneto@google.com> | 2019-02-20 17:18:28 -0500 |
---|---|---|
committer | David Neto <dneto@google.com> | 2019-02-21 19:52:57 -0500 |
commit | 83d14e6912c72138f77617d225a2f4a8786a9d82 (patch) | |
tree | 9ff24faf1e0271a77fbb0019edf793cfc0518a93 /re2/testing/set_test.cc | |
parent | 03e00e139ba1ef1ac728bb9b78181cf74a6b93be (diff) | |
parent | 79ef3b2d31f06493f687ef9e947d9632bad54b9b (diff) | |
download | regex-re2-83d14e6912c72138f77617d225a2f4a8786a9d82.tar.gz |
Merge remote-tracking branch 'aosp/upstream-master' into up-shaderc2
Refresh with content from github.com/google/re2
commit 79ef3b2d31f06493f687ef9e947d9632bad54b9b
date 2019-02-13
Change-Id: I4139f29d632e41722992309e96aca4f29c799c87
Diffstat (limited to 're2/testing/set_test.cc')
-rw-r--r-- | re2/testing/set_test.cc | 238 |
1 files changed, 171 insertions, 67 deletions
diff --git a/re2/testing/set_test.cc b/re2/testing/set_test.cc index 74058a4..5cdc11f 100644 --- a/re2/testing/set_test.cc +++ b/re2/testing/set_test.cc @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -#include <sys/types.h> -#include <sys/stat.h> +#include <stddef.h> +#include <string> #include <vector> #include "util/test.h" +#include "util/logging.h" #include "re2/re2.h" #include "re2/set.h" @@ -15,100 +16,203 @@ namespace re2 { TEST(Set, Unanchored) { RE2::Set s(RE2::DefaultOptions, RE2::UNANCHORED); - CHECK_EQ(s.Add("foo", NULL), 0); - CHECK_EQ(s.Add("(", NULL), -1); - CHECK_EQ(s.Add("bar", NULL), 1); + ASSERT_EQ(s.Add("foo", NULL), 0); + ASSERT_EQ(s.Add("(", NULL), -1); + ASSERT_EQ(s.Add("bar", NULL), 1); + ASSERT_EQ(s.Compile(), true); - CHECK_EQ(s.Compile(), true); + ASSERT_EQ(s.Match("foobar", NULL), true); + ASSERT_EQ(s.Match("fooba", NULL), true); + ASSERT_EQ(s.Match("oobar", NULL), true); - vector<int> v; - CHECK_EQ(s.Match("foobar", &v), true); - CHECK_EQ(v.size(), 2); - CHECK_EQ(v[0], 0); - CHECK_EQ(v[1], 1); + std::vector<int> v; + ASSERT_EQ(s.Match("foobar", &v), true); + ASSERT_EQ(v.size(), 2); + ASSERT_EQ(v[0], 0); + ASSERT_EQ(v[1], 1); - v.clear(); - CHECK_EQ(s.Match("fooba", &v), true); - CHECK_EQ(v.size(), 1); - CHECK_EQ(v[0], 0); + ASSERT_EQ(s.Match("fooba", &v), true); + ASSERT_EQ(v.size(), 1); + ASSERT_EQ(v[0], 0); - v.clear(); - CHECK_EQ(s.Match("oobar", &v), true); - CHECK_EQ(v.size(), 1); - CHECK_EQ(v[0], 1); + ASSERT_EQ(s.Match("oobar", &v), true); + ASSERT_EQ(v.size(), 1); + ASSERT_EQ(v[0], 1); } TEST(Set, UnanchoredFactored) { RE2::Set s(RE2::DefaultOptions, RE2::UNANCHORED); - CHECK_EQ(s.Add("foo", NULL), 0); - CHECK_EQ(s.Add("(", NULL), -1); - CHECK_EQ(s.Add("foobar", NULL), 1); + ASSERT_EQ(s.Add("foo", NULL), 0); + ASSERT_EQ(s.Add("(", NULL), -1); + ASSERT_EQ(s.Add("foobar", NULL), 1); + ASSERT_EQ(s.Compile(), true); + + ASSERT_EQ(s.Match("foobar", NULL), true); + ASSERT_EQ(s.Match("obarfoobaroo", NULL), true); + ASSERT_EQ(s.Match("fooba", NULL), true); + ASSERT_EQ(s.Match("oobar", NULL), false); + + std::vector<int> v; + ASSERT_EQ(s.Match("foobar", &v), true); + ASSERT_EQ(v.size(), 2); + ASSERT_EQ(v[0], 0); + ASSERT_EQ(v[1], 1); + + ASSERT_EQ(s.Match("obarfoobaroo", &v), true); + ASSERT_EQ(v.size(), 2); + ASSERT_EQ(v[0], 0); + ASSERT_EQ(v[1], 1); + + ASSERT_EQ(s.Match("fooba", &v), true); + ASSERT_EQ(v.size(), 1); + ASSERT_EQ(v[0], 0); + + ASSERT_EQ(s.Match("oobar", &v), false); + ASSERT_EQ(v.size(), 0); +} - CHECK_EQ(s.Compile(), true); +TEST(Set, UnanchoredDollar) { + RE2::Set s(RE2::DefaultOptions, RE2::UNANCHORED); - vector<int> v; - CHECK_EQ(s.Match("foobar", &v), true); - CHECK_EQ(v.size(), 2); - CHECK_EQ(v[0], 0); - CHECK_EQ(v[1], 1); + ASSERT_EQ(s.Add("foo$", NULL), 0); + ASSERT_EQ(s.Compile(), true); - v.clear(); - CHECK_EQ(s.Match("obarfoobaroo", &v), true); - CHECK_EQ(v.size(), 2); - CHECK_EQ(v[0], 0); - CHECK_EQ(v[1], 1); + ASSERT_EQ(s.Match("foo", NULL), true); + ASSERT_EQ(s.Match("foobar", NULL), false); - v.clear(); - CHECK_EQ(s.Match("fooba", &v), true); - CHECK_EQ(v.size(), 1); - CHECK_EQ(v[0], 0); + std::vector<int> v; + ASSERT_EQ(s.Match("foo", &v), true); + ASSERT_EQ(v.size(), 1); + ASSERT_EQ(v[0], 0); - v.clear(); - CHECK_EQ(s.Match("oobar", &v), false); - CHECK_EQ(v.size(), 0); + ASSERT_EQ(s.Match("foobar", &v), false); + ASSERT_EQ(v.size(), 0); } -TEST(Set, UnanchoredDollar) { +TEST(Set, UnanchoredWordBoundary) { RE2::Set s(RE2::DefaultOptions, RE2::UNANCHORED); - - CHECK_EQ(s.Add("foo$", NULL), 0); - CHECK_EQ(s.Compile(), true); - - vector<int> v; - CHECK_EQ(s.Match("foo", &v), true); - CHECK_EQ(v.size(), 1); - CHECK_EQ(v[0], 0); + + ASSERT_EQ(s.Add("foo\\b", NULL), 0); + ASSERT_EQ(s.Compile(), true); + + ASSERT_EQ(s.Match("foo", NULL), true); + ASSERT_EQ(s.Match("foobar", NULL), false); + ASSERT_EQ(s.Match("foo bar", NULL), true); + + std::vector<int> v; + ASSERT_EQ(s.Match("foo", &v), true); + ASSERT_EQ(v.size(), 1); + ASSERT_EQ(v[0], 0); + + ASSERT_EQ(s.Match("foobar", &v), false); + ASSERT_EQ(v.size(), 0); + + ASSERT_EQ(s.Match("foo bar", &v), true); + ASSERT_EQ(v.size(), 1); + ASSERT_EQ(v[0], 0); } TEST(Set, Anchored) { RE2::Set s(RE2::DefaultOptions, RE2::ANCHOR_BOTH); - CHECK_EQ(s.Add("foo", NULL), 0); - CHECK_EQ(s.Add("(", NULL), -1); - CHECK_EQ(s.Add("bar", NULL), 1); + ASSERT_EQ(s.Add("foo", NULL), 0); + ASSERT_EQ(s.Add("(", NULL), -1); + ASSERT_EQ(s.Add("bar", NULL), 1); + ASSERT_EQ(s.Compile(), true); - CHECK_EQ(s.Compile(), true); + ASSERT_EQ(s.Match("foobar", NULL), false); + ASSERT_EQ(s.Match("fooba", NULL), false); + ASSERT_EQ(s.Match("oobar", NULL), false); + ASSERT_EQ(s.Match("foo", NULL), true); + ASSERT_EQ(s.Match("bar", NULL), true); - vector<int> v; - CHECK_EQ(s.Match("foobar", &v), false); - CHECK_EQ(v.size(), 0); + std::vector<int> v; + ASSERT_EQ(s.Match("foobar", &v), false); + ASSERT_EQ(v.size(), 0); - CHECK_EQ(s.Match("fooba", &v), false); - CHECK_EQ(v.size(), 0); + ASSERT_EQ(s.Match("fooba", &v), false); + ASSERT_EQ(v.size(), 0); - CHECK_EQ(s.Match("oobar", &v), false); - CHECK_EQ(v.size(), 0); + ASSERT_EQ(s.Match("oobar", &v), false); + ASSERT_EQ(v.size(), 0); - CHECK_EQ(s.Match("foo", &v), true); - CHECK_EQ(v.size(), 1); - CHECK_EQ(v[0], 0); + ASSERT_EQ(s.Match("foo", &v), true); + ASSERT_EQ(v.size(), 1); + ASSERT_EQ(v[0], 0); - CHECK_EQ(s.Match("bar", &v), true); - CHECK_EQ(v.size(), 1); - CHECK_EQ(v[0], 1); + ASSERT_EQ(s.Match("bar", &v), true); + ASSERT_EQ(v.size(), 1); + ASSERT_EQ(v[0], 1); +} + +TEST(Set, EmptyUnanchored) { + RE2::Set s(RE2::DefaultOptions, RE2::UNANCHORED); + + ASSERT_EQ(s.Compile(), true); + + ASSERT_EQ(s.Match("", NULL), false); + ASSERT_EQ(s.Match("foobar", NULL), false); + std::vector<int> v; + ASSERT_EQ(s.Match("", &v), false); + ASSERT_EQ(v.size(), 0); + + ASSERT_EQ(s.Match("foobar", &v), false); + ASSERT_EQ(v.size(), 0); } -} // namespace re2 +TEST(Set, EmptyAnchored) { + RE2::Set s(RE2::DefaultOptions, RE2::ANCHOR_BOTH); + + ASSERT_EQ(s.Compile(), true); + ASSERT_EQ(s.Match("", NULL), false); + ASSERT_EQ(s.Match("foobar", NULL), false); + + std::vector<int> v; + ASSERT_EQ(s.Match("", &v), false); + ASSERT_EQ(v.size(), 0); + + ASSERT_EQ(s.Match("foobar", &v), false); + ASSERT_EQ(v.size(), 0); +} + +TEST(Set, Prefix) { + RE2::Set s(RE2::DefaultOptions, RE2::ANCHOR_BOTH); + + ASSERT_EQ(s.Add("/prefix/\\d*", NULL), 0); + ASSERT_EQ(s.Compile(), true); + + ASSERT_EQ(s.Match("/prefix", NULL), false); + ASSERT_EQ(s.Match("/prefix/", NULL), true); + ASSERT_EQ(s.Match("/prefix/42", NULL), true); + + std::vector<int> v; + ASSERT_EQ(s.Match("/prefix", &v), false); + ASSERT_EQ(v.size(), 0); + + ASSERT_EQ(s.Match("/prefix/", &v), true); + ASSERT_EQ(v.size(), 1); + ASSERT_EQ(v[0], 0); + + ASSERT_EQ(s.Match("/prefix/42", &v), true); + ASSERT_EQ(v.size(), 1); + ASSERT_EQ(v[0], 0); +} + +TEST(Set, OutOfMemory) { + RE2::Set s(RE2::DefaultOptions, RE2::UNANCHORED); + + string a(10000, 'a'); + ASSERT_EQ(s.Add(a, NULL), 0); + ASSERT_EQ(s.Compile(), true); + + std::vector<int> v; + RE2::Set::ErrorInfo ei; + ASSERT_EQ(s.Match(a, &v, &ei), false); + ASSERT_EQ(v.size(), 0); + ASSERT_EQ(ei.kind, RE2::Set::kOutOfMemory); +} + +} // namespace re2 |