From 770a40cef0b913917106826dfee0e2184cc51dcc Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Fri, 7 Dec 2012 20:43:11 +0900 Subject: [PATCH] Add a bunch more tests. Even found some bugs :) --- libs/util/test/test-set.c | 93 ++++++++++++++++++++++++++++++++------- 1 file changed, 77 insertions(+), 16 deletions(-) diff --git a/libs/util/test/test-set.c b/libs/util/test/test-set.c index 44431146d..9d8c5ef30 100644 --- a/libs/util/test/test-set.c +++ b/libs/util/test/test-set.c @@ -6,11 +6,15 @@ #include "QF/set.h" +#define SIZE (DEFMAP_SIZE * sizeof (unsigned) * 8) +#define BITS (sizeof (((set_t *) 0)->map[0]) * 8) + typedef set_t *(*setup_func) (void); -typedef set_t *(*test_func) (set_t *s1, set_t *s2); +typedef set_t *(*op_func) (set_t *s1, const set_t *s2); +typedef int (*test_func) (const set_t *s1, const set_t *s2); static set_t * -make_empty1 (void) +make_empty (void) { set_t *set = set_new (); return set; @@ -45,17 +49,59 @@ make_everything_invert (void) return set_invert (set); } +static set_t * +make_SIZE (void) +{ + set_t *set = set_new (); + set_add (set, SIZE); + return set; +} + +static set_t * +make_0_to_SIZEm1 (void) +{ + set_t *set = set_new (); + size_t i; + + for (i = 0; i < SIZE; i++) + set_add (set, i); + return set; +} + +static int +check_size (const set_t *set, const set_t *unused) +{ + return set->size; +} + struct { - setup_func set1; - setup_func set2; - test_func test; - const char *expect; + setup_func set1; + setup_func set2; + op_func op; + test_func test; + int test_expect; + const char *str_expect; } tests[] = { - {make_empty1, 0, 0, "[empty]"}, - {make_empty2, 0, 0, "[empty]"}, - {make_everything, 0, 0, "[everything]"}, - {make_empty_invert, 0, 0, "[everything]"}, - {make_everything_invert, 0, 0, "[empty]"}, + {make_empty, 0, 0, check_size, SIZE, "[empty]"}, + {make_empty2, 0, 0, check_size, SIZE, "[empty]"}, + {make_everything, 0, 0, check_size, SIZE, "[everything]"}, + {make_empty_invert, 0, 0, check_size, SIZE, "[everything]"}, + {make_everything_invert, 0, 0, check_size, SIZE, "[empty]"}, + {make_SIZE, 0, 0, check_size, SIZE + BITS, "64"}, + {make_0_to_SIZEm1, 0, 0, check_size, SIZE, + "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15" + " 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31" + " 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47" + " 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63" + }, + {make_everything, make_0_to_SIZEm1, set_difference, check_size, + SIZE, "64 ..." + }, + {make_0_to_SIZEm1, make_everything, set_reverse_difference, + check_size, SIZE, "64 ..." + }, + {make_everything, make_empty, 0, set_is_subset, 1, 0}, + {make_empty, make_everything, 0, set_is_subset, 0, 0}, }; #define num_tests (sizeof (tests) / sizeof (tests[0])) @@ -72,20 +118,35 @@ main (int argc, const char **argv) s1 = tests[i].set1 (); if (tests[i].set2) s2 = tests[i].set2 (); - if (tests[i].test) { - if (tests[i].test (s1, s2) != s1) { + if (tests[i].op) { + if (tests[i].op (s1, s2) != s1) { res |= 1; - printf ("test %d didn't return s1\n", (int) i); + printf ("test op %d didn't return s1\n", (int) i); + continue; + } + } + if (tests[i].test) { + int test_res; + test_res = tests[i].test (s1, s2); + if (test_res != tests[i].test_expect) { + res |= 1; + printf ("test %d failed\n", (int) i); + printf ("expect: %d\n", tests[i].test_expect); + printf ("got : %d\n", test_res); continue; } } set_str = set_as_string (s1); - if (strcmp (set_str, tests[i].expect)) { + if (tests[i].str_expect && strcmp (set_str, tests[i].str_expect)) { res |= 1; printf ("test %d failed\n", (int) i); - printf ("expect: %s\n", tests[i].expect); + printf ("expect: %s\n", tests[i].str_expect); printf ("got : %s\n", set_str); + continue; } + set_delete (s1); + if (s2) + set_delete (s2); } return res; }