X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Finvbloom%2Ftest%2Frun.c;fp=ccan%2Finvbloom%2Ftest%2Frun.c;h=b770128bdabd71681b3af43af801a88b2b7b7453;hb=49bb40e9615ada5a3e0d06bc45613744f441895c;hp=0000000000000000000000000000000000000000;hpb=5d34cc6b30b457ceb821bd8e4b352fd029e7dab0;p=ccan diff --git a/ccan/invbloom/test/run.c b/ccan/invbloom/test/run.c new file mode 100644 index 00000000..b770128b --- /dev/null +++ b/ccan/invbloom/test/run.c @@ -0,0 +1,115 @@ +#include +/* Include the C files directly. */ +#include +#include + +int main(void) +{ + struct invbloom *ib; + const tal_t *ctx = tal(NULL, char); + int val, val2, *ip, *ip2, i; + + /* This is how many tests you plan to run */ + plan_tests(127); + + ib = invbloom_new(ctx, int, 1, 100); + ok1(tal_parent(ib) == ctx); + ok1(ib->id_size == sizeof(int)); + ok1(ib->salt == 100); + ok1(ib->n_elems == 1); + ok1(invbloom_empty(ib)); + + val = 0; + invbloom_insert(ib, &val); + ok1(ib->count[0] == NUM_HASHES); + ok1(!invbloom_empty(ib)); + invbloom_delete(ib, &val); + ok1(invbloom_empty(ib)); + + val2 = 2; + invbloom_insert(ib, &val); + invbloom_insert(ib, &val2); + ok1(!invbloom_empty(ib)); + invbloom_delete(ib, &val); + ok1(!invbloom_empty(ib)); + invbloom_delete(ib, &val2); + ok1(invbloom_empty(ib)); + + tal_free(ib); + + ib = invbloom_new(ctx, int, 1, 100); + ok1(tal_parent(ib) == ctx); + ok1(ib->id_size == sizeof(int)); + ok1(ib->salt == 100); + ok1(ib->n_elems == 1); + ok1(invbloom_empty(ib)); + + val = 0; + invbloom_insert(ib, &val); + ok1(ib->count[0] == NUM_HASHES); + ok1(!invbloom_empty(ib)); + invbloom_delete(ib, &val); + ok1(invbloom_empty(ib)); + + val2 = 2; + invbloom_insert(ib, &val); + invbloom_insert(ib, &val2); + ok1(!invbloom_empty(ib)); + invbloom_delete(ib, &val); + ok1(!invbloom_empty(ib)); + invbloom_delete(ib, &val2); + ok1(invbloom_empty(ib)); + + tal_free(ib); + + /* Now, a more realistic test. */ + for (i = 0; i < 5; i++) { + ib = invbloom_new(ctx, int, 1024, i); + invbloom_insert(ib, &val); + invbloom_insert(ib, &val2); + ok1(invbloom_get(ib, &val)); + ok1(invbloom_get(ib, &val2)); + + ip = invbloom_extract_negative(ctx, ib); + ok1(!ip); + + ip = invbloom_extract(ctx, ib); + ok1(ip); + ok1(tal_parent(ip) == ctx); + ok1(*ip == val || *ip == val2); + + ip2 = invbloom_extract(ctx, ib); + ok1(ip2); + ok1(tal_parent(ip2) == ctx); + ok1(*ip2 == val || *ip2 == val2); + ok1(*ip2 != *ip); + + ok1(invbloom_extract(ctx, ib) == NULL); + + invbloom_delete(ib, &val); + invbloom_delete(ib, &val2); + ip = invbloom_extract(ctx, ib); + ok1(!ip); + + ip = invbloom_extract_negative(ctx, ib); + ok1(ip); + ok1(tal_parent(ip) == ctx); + ok1(*ip == val || *ip == val2); + + ip2 = invbloom_extract_negative(ctx, ib); + ok1(ip2); + ok1(tal_parent(ip2) == ctx); + ok1(*ip2 == val || *ip2 == val2); + ok1(*ip2 != *ip); + + ok1(invbloom_extract_negative(ctx, ib) == NULL); + ok1(invbloom_empty(ib)); + + tal_free(ib); + } + + tal_free(ctx); + + /* This exits depending on whether all tests passed */ + return exit_status(); +}