1 #include <ccan/strmap/strmap.h>
2 #include <ccan/strmap/strmap.c>
3 #include <ccan/tap/tap.h>
8 static bool in_order(const char *member, char *value, unsigned int *count)
11 ok1(i == atoi(value));
17 static bool in_order_by_2(const char *member, char *value, unsigned int *count)
20 ok1(i == atoi(value));
26 static bool dump(const char *member, char *value, bool *ok)
28 diag("%s=>%s", member, value);
29 if (value != member + 1)
41 plan_tests(1 + NUM * 4 + 3 * NUM);
44 for (i = 0; i < NUM; i++) {
46 sprintf(template, "%08u", i);
47 str[i] = strdup(template);
50 for (i = 0; i < NUM; i++)
51 strmap_add(&map, str[i], str[i]+1);
54 strmap_iterate(&map, dump, &dump_ok);
59 strmap_iterate(&map, in_order, &i);
61 /* Preserve order after deletion. */
62 for (i = 0; i < NUM; i += 2) {
64 ok1(strmap_del(&map, str[i], &v) == str[i]);
69 strmap_iterate(&map, in_order_by_2, &i);
71 for (i = 1; i < NUM; i += 2) {
73 ok1(strmap_del(&map, str[i], &v) == str[i]);
78 strmap_iterate(&map, in_order_by_2, (unsigned int *)NULL);
80 /* insert backwards, should be fine. */
81 for (i = 0; i < NUM; i++)
82 strmap_add(&map, str[NUM-1-i], str[NUM-1-i]+1);
85 strmap_iterate(&map, in_order, &i);
89 for (i = 0; i < NUM; i++)
92 /* This exits depending on whether all tests passed */