Because intmap_after_() would simply examine the critbits to walk the
tree, it wouldn't realize that it might be in the completely wrong tree.
In this case:
Bit 4:
0 1
/ \
/ \
100000011 100001011
When we ask for intmap_after_(
011111111) we would check the critbit, it's
a 1, so we end up on the right leaf instead of the left.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
--- /dev/null
+#include <ccan/intmap/intmap.h>
+#include <ccan/intmap/intmap.c>
+#include <ccan/tap/tap.h>
+
+int main(void)
+{
+ UINTMAP(const char *) map;
+ u64 idx;
+
+ /* This is how many tests you plan to run */
+ plan_tests(2);
+
+ uintmap_init(&map);
+ assert(uintmap_add(&map, 0x103, "103"));
+ assert(uintmap_add(&map, 0x10b, "10b"));
+
+ uintmap_first(&map, &idx);
+ ok1(idx > 0xF);
+ idx = 0xF;
+ ok1(strcmp(uintmap_after(&map, &idx), "103") == 0);
+
+ uintmap_clear(&map);
+
+ /* This exits depending on whether all tests passed */
+ return exit_status();
+}