From: Pavel TvrdĂ­k Date: Wed, 29 Jul 2015 09:49:51 +0000 (+0200) Subject: Birdtest: Add Pattern Matching Tests X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7e035b81cb00960b5fe712039ee322774ba28902;p=thirdparty%2Fbird.git Birdtest: Add Pattern Matching Tests --- diff --git a/lib/patmatch_test.c b/lib/patmatch_test.c new file mode 100644 index 000000000..2e781d494 --- /dev/null +++ b/lib/patmatch_test.c @@ -0,0 +1,133 @@ +/* + * BIRD Library -- Pattern Matching Tests + * + * (c) 2015 CZ.NIC z.s.p.o. + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#include "test/birdtest.h" +#include "test/birdtest_support.h" /* REMOVE ME */ + +#include "lib/patmatch.c" /* REMOVE ME */ + +#define MATCH 1 +#define NOMATCH 0 + +struct in { + byte *pattern; + byte *data; +}; + +struct in_out { + struct in in; + byte out; +}; + +static void +match(struct in in, byte *out) +{ + *out = patmatch(in.pattern, in.data) ? MATCH : NOMATCH; +} + +static int +t_matching(void) +{ + struct in_out in_out[] = { + { + .in = { + .pattern = "", + .data = "", + }, + .out = MATCH, + }, + { + .in = { + .pattern = "*", + .data = "", + }, + .out = MATCH, + }, + { + .in = { + .pattern = "\\*", + .data = "*", + }, + .out = MATCH, + }, + { + .in = { + .pattern = "\\*", + .data = "a", + }, + .out = NOMATCH, + }, { + .in = { + .pattern = "?", + .data = "", + }, + .out = NOMATCH, + }, + { + .in = { + .pattern = "abcdefghijklmnopqrstuvwxyz", + .data = "abcdefghijklmnopqrstuvwxyz", + }, + .out = MATCH, + }, + { + .in = { + .pattern = "??????????????????????????", + .data = "abcdefghijklmnopqrstuvwxyz", + }, + .out = MATCH, + }, + { + .in = { + .pattern = "*abcdefghijklmnopqrstuvwxyz*", + .data = "abcdefghijklmnopqrstuvwxyz", + }, + .out = MATCH, + }, { + .in = { + .pattern = "ab?defg*jklmnop*stu*wxy*z", + .data = "abcdefghijklmnopqrstuvwxyz", + }, + .out = MATCH, + }, + { + .in = { + .pattern = "abcdefghijklmnopqrstuvwxyz", + .data = "abcdefghijklmnopqrtuvwxyz", + }, + .out = NOMATCH, + }, + { + .in = { + .pattern = "abcdefghijklmnopqr?uvwxyz", + .data = "abcdefghijklmnopqrstuvwxyz", + }, + .out = NOMATCH, + }, + { + .in = { + .pattern = "aa*aaaaa?aaaaaaaaaaaaaaaaaaa", + .data = "aaaaaaaaaaaaaaaaaaaaaaaaaa", + }, + .out = NOMATCH, + }, + }; + + bt_assert_fn_in_out(match, in_out, "'%s' ~ '%s'", "%d"); + + return BT_SUCCESS; +} +int +main(int argc, char *argv[]) +{ + bt_init(argc, argv); + + bt_test_suite(t_matching, "Pattern matching"); + + return bt_end(); +}