X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Ftests%2Ftest_silcregex.c;h=c1c6b44b8093c297f872242d423ef2bb4d7dd816;hb=e7b6c157b80152bf9fb9266e6bdd93f9fb0db776;hp=87b7a5f40b2628e1ac0783f8efc55608d5c70774;hpb=89429cd0dc7e29b8284d5b6066f94719509ec885;p=silc.git diff --git a/lib/silcutil/tests/test_silcregex.c b/lib/silcutil/tests/test_silcregex.c index 87b7a5f4..c1c6b44b 100644 --- a/lib/silcutil/tests/test_silcregex.c +++ b/lib/silcutil/tests/test_silcregex.c @@ -6,17 +6,451 @@ int main(int argc, char **argv) { SilcBool success = FALSE; SilcRegexStruct reg; - SilcRegexMatchStruct match[10]; - int i, num_match = 10; + SilcRegexMatchStruct match[20]; + int i, num_match = 20; char *regex, *string, *sub; + SilcBufferStruct bmatch; if (argc > 1 && !strcmp(argv[1], "-d")) { silc_log_debug(TRUE); silc_log_quick(TRUE); silc_log_debug_hexdump(TRUE); - silc_log_set_debug_string("*regex*,*errno*"); + silc_log_set_debug_string("*regex*,*errno*,*buffmt*"); } + string = silc_strdup("foobar"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "s/foo/bar/")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, "barbar", 6)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar foobar"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "s/foo/bar/g")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, "barbar barbar", 13)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar foobar"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "s/foo/bar/")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, "barbar foobar", 13)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar foobar\nfoobar"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "s/foo/BARBAR/g")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, "BARBARbar\nBARBARbar BARBARbar\nBARBARbar", + 39)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar foobar\nfoobar"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "s/foo/BARBAR/")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, "BARBARbar\nBARBARbar foobar\nBARBARbar", + 36)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar foobar\nfoobar"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "s/foo//")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, "bar\nbar foobar\nbar", + 18)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar foobar\nfoobar"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "s/foo/B/g")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, "Bbar\nBbar Bbar\nBbar", + 19)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar foobar\nfoobar"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "s/foo/B/")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, "Bbar\nBbar foobar\nBbar", + 21)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nBfoobar foobar\nBfoobar\nfoo"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "/^B/s/foo/B/g")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, "foobar\nBBbar Bbar\nBBbar\nfoo", + 27)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "/baz/s/foo/BARBAR/g")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, + "foobar\nBARBARbar baz BARBARbar\nbazBARBARbar\nfoo", + 47)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "/baz/s/foo/BARBAR/")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, + "foobar\nBARBARbar baz foobar\nbazBARBARbar\nfoo", + 44)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "/baz/!s/foo/BARBAR/")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, + "BARBARbar\nfoobar baz foobar\nbazfoobar\nBARBAR", + 44)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "2s/foo/BARBAR/")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, + "foobar\nBARBARbar baz foobar\nbazfoobar\nfoo", + 41)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "2s/foo/BARBAR/g")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, + "foobar\nBARBARbar baz BARBARbar\nbazfoobar\nfoo", + 44)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "200s/foo/BARBAR/g")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, + "foobar\nfoobar baz foobar\nbazfoobar\nfoo", + 38)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "2!s/foo/BARBAR/g")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, + "BARBARbar\nfoobar baz foobar\nbazBARBARbar\nBARBAR", + 47)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "/xxx/s/foo/BARBAR/g")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, + "foobar\nfoobar baz foobar\nbazfoobar\nfoo", + 38)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "!s/foo/BARBAR/g")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, + "foobar\nfoobar baz foobar\nbazfoobar\nfoo", + 38)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "$s/foo/BARBAR/g")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, + "foobar\nfoobar baz foobar\nbazfoobar\nBARBAR", + 41)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "$!s/foo/BARBAR/g")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, + "BARBARbar\nBARBARbar baz BARBARbar\nbazBARBARbar\nfoo", + 50)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar /baz/ foobar\nbazfoobar\nfoo"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "s/\\//BARBAR/g")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, + "foobar\nfoobar BARBARbazBARBAR foobar\nbazfoobar\nfoo", + 50)) + goto err; + silc_buffer_purge(&bmatch); + + string = silc_strdup("foobar\nfoobar /baz/ foobar\nbazfoobar\nfoo"); + SILC_LOG_DEBUG(("Replace %s", string)); + silc_buffer_set(&bmatch, string, strlen(string)); + if (!silc_subst(&bmatch, "s/\\//\\/\\//g")) + goto err; + silc_buffer_printf(&bmatch, TRUE); + if (!silc_buffer_memcmp(&bmatch, + "foobar\nfoobar //baz// foobar\nbazfoobar\nfoo", + 42)) + goto err; + silc_buffer_purge(&bmatch); + + regex = ".{5}"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "abcdefghijklmn"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "....."; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "abcdefghijklmn"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "^a{0}$"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = ""; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "^a{0,}$"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "bbbb"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "^a{0,}$"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "aaaaaaaaa"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "^a{0,0}$"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "a"; + SILC_LOG_DEBUG(("DO NOT Match %s", string)); + if (silc_regex(string, regex, &bmatch, NULL)) + goto err; + + regex = "^a{3}$"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "aaa"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "^a{3}$"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "aaaa"; + SILC_LOG_DEBUG(("DO NOT Match %s", string)); + if (silc_regex(string, regex, &bmatch, NULL)) + goto err; + + regex = "^a{3,5}$"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "aaa"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "^a{3,5}$"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "aaaa"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "^a{3,5}$"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "aaaaaa"; + SILC_LOG_DEBUG(("DO NOT Match %s", string)); + if (silc_regex(string, regex, &bmatch, NULL)) + goto err; + + regex = "^a{3,}$"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "aaa"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "^a{3,}$"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "aaaaaaaaaaaaa"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "^a{3,}$"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "aa"; + SILC_LOG_DEBUG(("DO NOT Match %s", string)); + if (silc_regex(string, regex, &bmatch, NULL)) + goto err; + + + regex = "a*b"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "b"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "a*b"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "ab"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "a*b"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "aaaab"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + + regex = "a+b"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "ab"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "a+b"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "aaaab"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "a+b"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "b"; + SILC_LOG_DEBUG(("DO NOT Match %s", string)); + if (silc_regex(string, regex, &bmatch, NULL)) + goto err; + + + regex = "ca?b"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "cb"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "ca?b"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "cab"; + SILC_LOG_DEBUG(("Match %s", string)); + if (!silc_regex(string, regex, &bmatch, NULL)) + goto err; + silc_buffer_printf(&bmatch, TRUE); + + regex = "ca?b"; + SILC_LOG_DEBUG(("Regex %s", regex)); + string = "caab"; + SILC_LOG_DEBUG(("DO NOT Match %s", string)); + if (silc_regex(string, regex, &bmatch, NULL)) + goto err; + regex = "(H..).(o..)"; SILC_LOG_DEBUG(("Regex %s", regex)); if (!silc_regex_compile(®, regex, 0)) @@ -30,7 +464,7 @@ int main(int argc, char **argv) if (match[i].start != -1) { SILC_LOG_DEBUG(("Match start %d, end %d", match[i].start, match[i].end)); - sub = silc_memdup(string + match[i].start, match[i].end - + sub = silc_memdup(string + match[i].start, match[i].end - match[i].start); SILC_LOG_DEBUG(("Match substring '%s'", sub)); silc_free(sub); @@ -72,7 +506,7 @@ int main(int argc, char **argv) for (i = 0; i < num_match; i++) { if (match[i].start != -1) { SILC_LOG_DEBUG(("Match start %d", match[i].start)); - sub = silc_memdup(string + match[i].start, match[i].end - + sub = silc_memdup(string + match[i].start, match[i].end - match[i].start); SILC_LOG_DEBUG(("Match substring '%s'", sub)); silc_free(sub); @@ -94,7 +528,7 @@ int main(int argc, char **argv) for (i = 0; i < num_match; i++) { if (match[i].start != -1) { SILC_LOG_DEBUG(("Match start %d", match[i].start)); - sub = silc_memdup(string + match[i].start, match[i].end - + sub = silc_memdup(string + match[i].start, match[i].end - match[i].start); SILC_LOG_DEBUG(("Match substring '%s'", sub)); silc_free(sub); @@ -109,7 +543,7 @@ int main(int argc, char **argv) for (i = 0; i < num_match; i++) { if (match[i].start != -1) { SILC_LOG_DEBUG(("Match start %d", match[i].start)); - sub = silc_memdup(string + match[i].start, match[i].end - + sub = silc_memdup(string + match[i].start, match[i].end - match[i].start); SILC_LOG_DEBUG(("Match substring '%s'", sub)); silc_free(sub); @@ -131,7 +565,7 @@ int main(int argc, char **argv) for (i = 0; i < num_match; i++) { if (match[i].start != -1) { SILC_LOG_DEBUG(("Match start %d", match[i].start)); - sub = silc_memdup(string + match[i].start, match[i].end - + sub = silc_memdup(string + match[i].start, match[i].end - match[i].start); SILC_LOG_DEBUG(("Match substring '%s'", sub)); silc_free(sub); @@ -180,4 +614,3 @@ int main(int argc, char **argv) return success; } -