summaryrefslogtreecommitdiffstats
path: root/library/cpp/regex/pcre/pcre_ut_base.h
diff options
context:
space:
mode:
authorDevtools Arcadia <[email protected]>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <[email protected]>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/regex/pcre/pcre_ut_base.h
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/regex/pcre/pcre_ut_base.h')
-rw-r--r--library/cpp/regex/pcre/pcre_ut_base.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/library/cpp/regex/pcre/pcre_ut_base.h b/library/cpp/regex/pcre/pcre_ut_base.h
new file mode 100644
index 00000000000..1d61d07b14a
--- /dev/null
+++ b/library/cpp/regex/pcre/pcre_ut_base.h
@@ -0,0 +1,38 @@
+#define CHECK_MATCHES(EXPECTED, PATTERN, STR) \
+ UNIT_ASSERT(EXPECTED == NPcre::TPcre<CHAR_TYPE>(STRING(PATTERN), OPTIMIZE).Matches(STRING(STR))); \
+ UNIT_ASSERT(EXPECTED == NPcre::TPcre<CHAR_TYPE>(STRING(PATTERN), OPTIMIZE).Matches(STRING(STR), 0, 10));
+
+#define CHECK(A, B) UNIT_ASSERT_STRINGS_EQUAL(ToString(STRING(A)), ToString(B))
+
+#define CHECK_GROUPS(EXPECTED, PATTERN, STR) \
+ CHECK(EXPECTED, NPcre::TPcre<CHAR_TYPE>(STRING(PATTERN), OPTIMIZE).Find(STRING(STR))); \
+ CHECK(EXPECTED, NPcre::TPcre<CHAR_TYPE>(STRING(PATTERN), OPTIMIZE).Find(STRING(STR), 0, 10));
+
+Y_UNIT_TEST_SUITE(TEST_NAME(TestRegExp)) {
+ Y_UNIT_TEST(TestMatches) {
+ CHECK_MATCHES(true, "ю", "bюd");
+ CHECK_MATCHES(false, "c", "bюd");
+ CHECK_MATCHES(true, "(ю)(?:(b)c|bd)", "zюbda");
+ CHECK_MATCHES(false, "(ю)(?:(b)c|bd)", "bюd");
+ CHECK_MATCHES(true, "(abc|def)=\\g1", "abc=abc");
+ CHECK_MATCHES(true, "(abc|def)=\\g1", "def=def");
+ CHECK_MATCHES(false, "(abc|def)=\\g1", "abc=def");
+ }
+
+ Y_UNIT_TEST(TestGroups) {
+ CHECK_GROUPS("{1,2}", "a", "bad");
+ CHECK_GROUPS("(empty maybe)", "c", "bad");
+ CHECK_GROUPS("{1,4}", "(a)(?:(b)c|bd)", "zabda");
+ CHECK_GROUPS("(empty maybe)", "(a)(?:(b)c|bd)", "bad");
+ CHECK_GROUPS("{1,8}", "(abc|def)=\\g1", "aabc=abca");
+ CHECK_GROUPS("(empty maybe)", "(abc|def)=\\g1", "abc=def");
+ }
+
+ Y_UNIT_TEST(TestCapture) {
+ CHECK("[{1,2}]",NPcre::TPcre<CHAR_TYPE>(STRING("a"), OPTIMIZE).Capture(STRING("bad"), 0, 1));
+ CHECK("[]",NPcre::TPcre<CHAR_TYPE>(STRING("c"), OPTIMIZE).Capture(STRING("bad"), 0, 1));
+ CHECK("[{1,4},{1,2},{-1,-1},{3,4}]",NPcre::TPcre<CHAR_TYPE>(STRING("(a)(?:(b)c|b(d))"), OPTIMIZE).Capture(STRING("zabda"), 0, 1));
+ CHECK("[]",NPcre::TPcre<CHAR_TYPE>(STRING("(a)(?:(b)c|bd)"), OPTIMIZE).Capture(STRING("bad"), 0, 1));
+ }
+}
+