Annotation of embedaddon/bird2/lib/patmatch_test.c, revision 1.1.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>