aboutsummaryrefslogtreecommitdiff
path: root/re2/testing/set_test.cc
diff options
context:
space:
mode:
authorDavid Neto <dneto@google.com>2019-02-20 17:18:28 -0500
committerDavid Neto <dneto@google.com>2019-02-21 19:52:57 -0500
commit83d14e6912c72138f77617d225a2f4a8786a9d82 (patch)
tree9ff24faf1e0271a77fbb0019edf793cfc0518a93 /re2/testing/set_test.cc
parent03e00e139ba1ef1ac728bb9b78181cf74a6b93be (diff)
parent79ef3b2d31f06493f687ef9e947d9632bad54b9b (diff)
downloadregex-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.cc238
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