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)
37 STRMAP_MEMBERS(char *);
43 plan_tests(1 + NUM * 4 + 3 * NUM);
46 for (i = 0; i < NUM; i++) {
48 sprintf(template, "%08u", i);
49 str[i] = strdup(template);
52 for (i = 0; i < NUM; i++)
53 strmap_add(&map, str[i], str[i]+1);
56 strmap_iterate(&map, dump, &dump_ok);
61 strmap_iterate(&map, in_order, &i);
63 /* Preserve order after deletion. */
64 for (i = 0; i < NUM; i += 2) {
66 ok1(strmap_del(&map, str[i], &v) == str[i]);
71 strmap_iterate(&map, in_order_by_2, &i);
73 for (i = 1; i < NUM; i += 2) {
75 ok1(strmap_del(&map, str[i], &v) == str[i]);
80 strmap_iterate(&map, in_order_by_2, (unsigned int *)NULL);
82 /* insert backwards, should be fine. */
83 for (i = 0; i < NUM; i++)
84 strmap_add(&map, str[NUM-1-i], str[NUM-1-i]+1);
87 strmap_iterate(&map, in_order, &i);
91 for (i = 0; i < NUM; i++)
94 /* This exits depending on whether all tests passed */