Annotation of embedaddon/bird2/lib/patmatch_test.c, revision 1.1
1.1 ! misho 1: /*
! 2: * BIRD Library -- Pattern Matching Tests
! 3: *
! 4: * (c) 2015 CZ.NIC z.s.p.o.
! 5: *
! 6: * Can be freely distributed and used under the terms of the GNU GPL.
! 7: */
! 8:
! 9: #include "test/birdtest.h"
! 10:
! 11: #include "nest/bird.h"
! 12: #include "lib/string.h"
! 13:
! 14: #define MATCH (int) { 1 }
! 15: #define NOMATCH (int) { 0 }
! 16:
! 17: struct match_pair {
! 18: byte *pattern;
! 19: byte *data;
! 20: };
! 21:
! 22: static int
! 23: test_matching(void *out_, const void *in_, const void *expected_out_)
! 24: {
! 25: int *out = out_;
! 26: const struct match_pair *in = in_;
! 27: const int *expected_out = expected_out_;
! 28:
! 29: *out = patmatch(in->pattern, in->data);
! 30:
! 31: return *out == *expected_out;
! 32: }
! 33:
! 34: static void
! 35: fmt_match_pair(char *buf, size_t size, const void *data)
! 36: {
! 37: const struct match_pair *mp = data;
! 38: snprintf(buf, size, "pattern: '%s', subject: '%s'", mp->pattern, mp->data);
! 39: }
! 40:
! 41: static void
! 42: fmt_match_result(char *buf, size_t size, const void *data)
! 43: {
! 44: const int *result = data;
! 45: snprintf(buf, size, *result ? "match" : "no-match");
! 46: }
! 47:
! 48: static int
! 49: t_matching(void)
! 50: {
! 51: struct bt_pair test_vectors[] = {
! 52: {
! 53: .in = & (struct match_pair) {
! 54: .pattern = "",
! 55: .data = "",
! 56: },
! 57: .out = & MATCH,
! 58: },
! 59: {
! 60: .in = & (struct match_pair) {
! 61: .pattern = "*",
! 62: .data = "",
! 63: },
! 64: .out = & MATCH,
! 65: },
! 66: {
! 67: .in = & (struct match_pair) {
! 68: .pattern = "\\*",
! 69: .data = "*",
! 70: },
! 71: .out = & MATCH,
! 72: },
! 73: {
! 74: .in = & (struct match_pair) {
! 75: .pattern = "\\*",
! 76: .data = "a",
! 77: },
! 78: .out = & NOMATCH,
! 79: },
! 80: {
! 81: .in = & (struct match_pair) {
! 82: .pattern = "?",
! 83: .data = "",
! 84: },
! 85: .out = & NOMATCH,
! 86: },
! 87: {
! 88: .in = & (struct match_pair) {
! 89: .pattern = "abcdefghijklmnopqrstuvwxyz",
! 90: .data = "abcdefghijklmnopqrstuvwxyz",
! 91: },
! 92: .out = & MATCH,
! 93: },
! 94: {
! 95: .in = & (struct match_pair) {
! 96: .pattern = "??????????????????????????",
! 97: .data = "abcdefghijklmnopqrstuvwxyz",
! 98: },
! 99: .out = & MATCH,
! 100: },
! 101: {
! 102: .in = & (struct match_pair) {
! 103: .pattern = "*abcdefghijklmnopqrstuvwxyz*",
! 104: .data = "abcdefghijklmnopqrstuvwxyz",
! 105: },
! 106: .out = & MATCH,
! 107: },
! 108: {
! 109: .in = & (struct match_pair) {
! 110: .pattern = "ab?defg*jklmnop*stu*wxy*z",
! 111: .data = "abcdefghijklmnopqrstuvwxyz",
! 112: },
! 113: .out = & MATCH,
! 114: },
! 115: {
! 116: .in = & (struct match_pair) {
! 117: .pattern = "abcdefghijklmnopqrstuvwxyz",
! 118: .data = "abcdefghijklmnopqrtuvwxyz",
! 119: },
! 120: .out = & NOMATCH,
! 121: },
! 122: {
! 123: .in = & (struct match_pair) {
! 124: .pattern = "abcdefghijklmnopqr?uvwxyz",
! 125: .data = "abcdefghijklmnopqrstuvwxyz",
! 126: },
! 127: .out = & NOMATCH,
! 128: },
! 129: {
! 130: .in = & (struct match_pair) {
! 131: .pattern = "aa*aaaaa?aaaaaaaaaaaaaaaaaaa",
! 132: .data = "aaaaaaaaaaaaaaaaaaaaaaaaaa",
! 133: },
! 134: .out = & NOMATCH,
! 135: },
! 136: };
! 137:
! 138: return bt_assert_batch(test_vectors, test_matching, fmt_match_pair, fmt_match_result);
! 139: }
! 140:
! 141: int
! 142: main(int argc, char *argv[])
! 143: {
! 144: bt_init(argc, argv);
! 145:
! 146: bt_test_suite(t_matching, "Pattern matching");
! 147:
! 148: return bt_exit_value();
! 149: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>