X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Frbtree%2Ftest%2Frun-many.c;fp=ccan%2Frbtree%2Ftest%2Frun-many.c;h=6474007fb4f0f259b64231b0e026aa3df34f4f59;hp=0000000000000000000000000000000000000000;hb=8f2bfcd370a0e00605a7d84600847b150255c533;hpb=c5074939f21be43eb408dbab5f6708dd74dba531 diff --git a/ccan/rbtree/test/run-many.c b/ccan/rbtree/test/run-many.c new file mode 100644 index 00000000..6474007f --- /dev/null +++ b/ccan/rbtree/test/run-many.c @@ -0,0 +1,89 @@ +#include +#include +#include +#include +#include + +#define NUM_ELEMS 10000 + +static bool lookup_all(trbt_tree_t *rb, bool exist) +{ + unsigned int i; + + for (i = 0; i < NUM_ELEMS; i++) { + int *p = trbt_lookup32(rb, i); + if (p) { + if (!exist) + return false; + if (*p != i) + return false; + } else + if (exist) + return false; + } + return true; +} + +static bool insert_all(trbt_tree_t *rb, bool exist) +{ + unsigned int i; + + for (i = 0; i < NUM_ELEMS; i++) { + int *p = trbt_insert32(rb, i, talloc_memdup(rb, &i, sizeof(i))); + if (p) { + if (!exist) + return false; + if (*p != i) + return false; + } else + if (exist) + return false; + } + return true; +} + +static void delete_all(trbt_tree_t *rb) +{ + unsigned int i; + + for (i = 0; i < NUM_ELEMS; i++) { + trbt_delete32(rb, i); + } +} + +int main(void) +{ + trbt_tree_t *rb; + void *ctx = talloc_init("toplevel"); + unsigned int i; + + plan_tests(7); + + rb = trbt_create(ctx, 0); + ok1(rb); + + /* None should be there. */ + ok1(lookup_all(rb, false)); + + /* Insert, none should be there previously. */ + ok1(insert_all(rb, false)); + + /* All there now. */ + ok1(lookup_all(rb, true)); + + /* Replace all. */ + ok1(insert_all(rb, true)); + + /* Delete all. */ + delete_all(rb); + + /* One more time... */ + ok1(lookup_all(rb, false)); + ok1(insert_all(rb, false)); + + /* All are children of rb, so this is clean. */ + talloc_free(rb); + + /* This exits depending on whether all tests passed */ + return exit_status(); +}