1 /* Test high bit handling. */
2 #include <ccan/strset/strset.h>
3 #include <ccan/strset/strset.c>
4 #include <ccan/tap/tap.h>
8 static void encode(char template[3], unsigned int val)
10 assert(val < 255 * 255);
11 template[0] = (val / 255) + 1;
12 template[1] = (val % 255) + 1;
16 static bool in_order(const char *value, unsigned int *count)
19 encode(template, *count);
20 ok1(streq(value, template));
25 static bool in_order_by_2(const char *value, unsigned int *count)
28 encode(template, *count);
29 ok1(streq(value, template));
34 static bool dump(const char *value, void *unused)
46 plan_tests(NUM + 3 * NUM / 2);
49 for (i = 0; i < NUM; i++) {
52 str[i] = strdup(template);
55 for (i = 0; i < NUM; i++)
56 strset_add(&set, str[i]);
58 strset_iterate(&set, dump, NULL);
62 strset_iterate(&set, in_order, &i);
64 /* Preserve order after deletion. */
65 for (i = 0; i < NUM; i += 2)
66 ok1(strset_del(&set, str[i]) == str[i]);
69 strset_iterate(&set, in_order_by_2, &i);
71 for (i = 1; i < NUM; i += 2)
72 ok1(strset_del(&set, str[i]) == str[i]);
75 strset_iterate(&set, in_order_by_2, (unsigned int *)NULL);
77 for (i = 0; i < NUM; i++)
80 /* This exits depending on whether all tests passed */