Commit 4d9c7e1c authored by Rusty Russell's avatar Rusty Russell

intmap: add test case which failed, extracted from real world usage.

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: default avatarRusty Russell <rusty@rustcorp.com.au>
parent e59acd52
#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();
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment