1 #include <ccan/invbloom/invbloom.h>
2 /* Include the C files directly. */
3 #include <ccan/invbloom/invbloom.c>
4 #include <ccan/tap/tap.h>
9 const tal_t *ctx = tal(NULL, char);
10 int val, val2, *ip, *ip2, i;
12 /* This is how many tests you plan to run */
15 ib = invbloom_new(ctx, int, 1, 100);
16 ok1(tal_parent(ib) == ctx);
17 ok1(ib->id_size == sizeof(int));
19 ok1(ib->n_elems == 1);
20 ok1(invbloom_empty(ib));
23 invbloom_insert(ib, &val);
24 ok1(ib->count[0] == NUM_HASHES);
25 ok1(!invbloom_empty(ib));
26 invbloom_delete(ib, &val);
27 ok1(invbloom_empty(ib));
30 invbloom_insert(ib, &val);
31 invbloom_insert(ib, &val2);
32 ok1(!invbloom_empty(ib));
33 invbloom_delete(ib, &val);
34 ok1(!invbloom_empty(ib));
35 invbloom_delete(ib, &val2);
36 ok1(invbloom_empty(ib));
40 ib = invbloom_new(ctx, int, 1, 100);
41 ok1(tal_parent(ib) == ctx);
42 ok1(ib->id_size == sizeof(int));
44 ok1(ib->n_elems == 1);
45 ok1(invbloom_empty(ib));
48 invbloom_insert(ib, &val);
49 ok1(ib->count[0] == NUM_HASHES);
50 ok1(!invbloom_empty(ib));
51 invbloom_delete(ib, &val);
52 ok1(invbloom_empty(ib));
55 invbloom_insert(ib, &val);
56 invbloom_insert(ib, &val2);
57 ok1(!invbloom_empty(ib));
58 invbloom_delete(ib, &val);
59 ok1(!invbloom_empty(ib));
60 invbloom_delete(ib, &val2);
61 ok1(invbloom_empty(ib));
65 /* Now, a more realistic test. */
66 for (i = 0; i < 5; i++) {
67 ib = invbloom_new(ctx, int, 1024, i);
68 invbloom_insert(ib, &val);
69 invbloom_insert(ib, &val2);
70 ok1(invbloom_get(ib, &val));
71 ok1(invbloom_get(ib, &val2));
73 ip = invbloom_extract_negative(ctx, ib);
76 ip = invbloom_extract(ctx, ib);
78 ok1(tal_parent(ip) == ctx);
79 ok1(*ip == val || *ip == val2);
81 ip2 = invbloom_extract(ctx, ib);
83 ok1(tal_parent(ip2) == ctx);
84 ok1(*ip2 == val || *ip2 == val2);
87 ok1(invbloom_extract(ctx, ib) == NULL);
89 invbloom_delete(ib, &val);
90 invbloom_delete(ib, &val2);
91 ip = invbloom_extract(ctx, ib);
94 ip = invbloom_extract_negative(ctx, ib);
96 ok1(tal_parent(ip) == ctx);
97 ok1(*ip == val || *ip == val2);
99 ip2 = invbloom_extract_negative(ctx, ib);
101 ok1(tal_parent(ip2) == ctx);
102 ok1(*ip2 == val || *ip2 == val2);
105 ok1(invbloom_extract_negative(ctx, ib) == NULL);
106 ok1(invbloom_empty(ib));
113 /* This exits depending on whether all tests passed */
114 return exit_status();