From 1b8fbbd843ddeb5fc81c9303db9c590a436d499b Mon Sep 17 00:00:00 2001 From: William Casarin Date: Mon, 9 Jul 2018 12:10:32 -0700 Subject: progress --- ccan/tal/test/run-test-backend.c | 80 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 ccan/tal/test/run-test-backend.c (limited to 'ccan/tal/test/run-test-backend.c') diff --git a/ccan/tal/test/run-test-backend.c b/ccan/tal/test/run-test-backend.c new file mode 100644 index 0000000..ebcd811 --- /dev/null +++ b/ccan/tal/test/run-test-backend.c @@ -0,0 +1,80 @@ +#include +#include + +/* Make sure it always uses our allocation/resize/free fns! */ +static bool my_alloc_called; + +static void *my_alloc(size_t len) +{ + my_alloc_called = true; + return (char *)malloc(len + 16) + 16; +} + +static void my_free(void *p) +{ + if (p) + free((char *)p - 16); +} + +static void *my_realloc(void *old, size_t new_size) +{ + return (char *)realloc((char *)old - 16, new_size + 16) + 16; +} + +#define free ((void (*)(void *))abort) +#define malloc ((void *(*)(size_t))abort) +#define realloc ((void *(*)(void *, size_t))abort) + +#include +#include +#include + +#define NUM_ALLOCS 1000 + +static void destroy_p(void *p UNNEEDED) +{ +} + +int main(void) +{ + void *p, *c[NUM_ALLOCS]; + int i; + char *name; + + /* Mostly we rely on the allocator (or valgrind) crashing. */ + plan_tests(1); + + tal_set_backend(my_alloc, my_realloc, my_free, NULL); + + p = tal(NULL, char); + ok1(my_alloc_called); + + /* Adding properties makes us allocated. */ + tal_add_destructor(p, destroy_p); + + tal_set_name(p, "test"); + name = tal_arr(NULL, char, 6); + strcpy(name, "test2"); + tal_set_name(p, name); + /* makes us free old name */ + tal_set_name(p, name); + tal_free(name); + + /* Add lots of children. */ + for (i = 0; i < NUM_ALLOCS; i++) + c[i] = tal(p, char); + + /* Now steal a few. */ + for (i = 1; i < NUM_ALLOCS / 2; i++) + tal_steal(c[0], c[i]); + + /* Now free individual ones.. */ + for (i = NUM_ALLOCS / 2; i < NUM_ALLOCS; i++) + tal_free(c[i]); + + /* Finally, free the parent. */ + tal_free(p); + + tal_cleanup(); + return exit_status(); +} -- cgit v1.2.3