strset: new module using critbit trees.
[ccan] / ccan / strset / test / run.c
1 #include <ccan/strset/strset.h>
2 #include <ccan/strset/strset.c>
3 #include <ccan/tap/tap.h>
4
5 int main(void)
6 {
7         struct strset set;
8         const char str[] = "hello";
9         const char none[] = "";
10         char *dup = strdup(str);
11
12         /* This is how many tests you plan to run */
13         plan_tests(24);
14
15         strset_init(&set);
16
17         ok1(!strset_test(&set, str));
18         ok1(!strset_test(&set, none));
19         ok1(!strset_clear(&set, str));
20         ok1(!strset_clear(&set, none));
21
22         ok1(strset_set(&set, str));
23         ok1(strset_test(&set, str));
24         /* We compare the string, not the pointer. */
25         ok1(strset_test(&set, dup));
26         ok1(!strset_test(&set, none));
27
28         /* Delete should return original string. */
29         ok1(strset_clear(&set, dup) == str);
30         ok1(!strset_test(&set, str));
31         ok1(!strset_test(&set, none));
32
33         /* Try insert and delete of empty string. */
34         ok1(strset_set(&set, none));
35         ok1(strset_test(&set, none));
36         ok1(!strset_test(&set, str));
37
38         /* Delete should return original string. */
39         ok1(strset_clear(&set, "") == none);
40         ok1(!strset_test(&set, str));
41         ok1(!strset_test(&set, none));
42
43         /* Both at once... */
44         ok1(strset_set(&set, none));
45         ok1(strset_set(&set, str));
46         ok1(strset_test(&set, str));
47         ok1(strset_test(&set, none));
48         ok1(strset_clear(&set, "") == none);
49         ok1(strset_clear(&set, dup) == str);
50
51         ok1(set.u.n == NULL);
52         free(dup);
53
54         /* This exits depending on whether all tests passed */
55         return exit_status();
56 }