cfda0ee38f0ce998a16c5779fc793d8bf0722565
[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(26);
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         /* Add of duplicate should fail. */
29         ok1(!strset_set(&set, dup));
30         ok1(errno == EEXIST);
31
32         /* Delete should return original string. */
33         ok1(strset_clear(&set, dup) == str);
34         ok1(!strset_test(&set, str));
35         ok1(!strset_test(&set, none));
36
37         /* Try insert and delete of empty string. */
38         ok1(strset_set(&set, none));
39         ok1(strset_test(&set, none));
40         ok1(!strset_test(&set, str));
41
42         /* Delete should return original string. */
43         ok1(strset_clear(&set, "") == none);
44         ok1(!strset_test(&set, str));
45         ok1(!strset_test(&set, none));
46
47         /* Both at once... */
48         ok1(strset_set(&set, none));
49         ok1(strset_set(&set, str));
50         ok1(strset_test(&set, str));
51         ok1(strset_test(&set, none));
52         ok1(strset_clear(&set, "") == none);
53         ok1(strset_clear(&set, dup) == str);
54
55         ok1(set.u.n == NULL);
56         free(dup);
57
58         /* This exits depending on whether all tests passed */
59         return exit_status();
60 }