1 #include <ccan/alloc/alloc.h>
2 #include <ccan/tap/tap.h>
3 #include <ccan/alloc/alloc.c>
4 #include <ccan/alloc/bitops.c>
5 #include <ccan/alloc/tiny.c>
10 static void invert_bytes(unsigned char *p, unsigned long size)
14 for (i = 0; i < size; i++)
18 static bool sizes_ok(void *mem, unsigned long poolsize, void *p[], unsigned num)
22 for (i = 0; i < num; i++)
23 if (p[i] && alloc_size(mem, poolsize, p[i]) < i)
28 static void test_pool(unsigned long pool_size)
35 p = calloc(pool_size, sizeof(void *));
36 mem = malloc(pool_size);
38 alloc_init(mem, pool_size);
40 /* Check that alloc_size() gives reasonable answers. */
41 for (i = 0; i < pool_size; i = i * 3 / 2 + 1) {
42 p[i] = alloc_get(mem, pool_size, i, 1);
45 invert_bytes(p[i], alloc_size(mem, pool_size, p[i]));
49 ok1(alloc_check(mem, pool_size));
50 ok1(sizes_ok(mem, pool_size, p, num));
52 /* Free every second one. */
53 for (i = 0; i < num; i = i * 3 / 2 + 1) {
56 invert_bytes(p[i], alloc_size(mem,pool_size,p[i]));
59 alloc_free(mem, pool_size, p[i]);
62 ok1(alloc_check(mem, pool_size));
63 ok1(sizes_ok(mem, pool_size, p, num));
68 int main(int argc, char *argv[])
73 test_pool(MIN_USEFUL_SIZE * 2);
76 test_pool(MIN_USEFUL_SIZE / 2);