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>