X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftal%2Ftest%2Frun-take.c;h=94b6581749964b3331f13907d3eaaececade2754;hp=dbc78a33b83a1d3a9ffcd654e3a2400851c87f91;hb=ba57295a55704ad68f46f7ee741dc8f3ac9db6af;hpb=5bdda8409e559d1b3485639ed43d3b69e4c3fa62 diff --git a/ccan/tal/test/run-take.c b/ccan/tal/test/run-take.c index dbc78a33..94b65817 100644 --- a/ccan/tal/test/run-take.c +++ b/ccan/tal/test/run-take.c @@ -6,42 +6,52 @@ int main(void) { char *parent, *c; - plan_tests(13); + plan_tests(21); + + /* We can take NULL. */ + ok1(take(NULL) == NULL); + ok1(is_taken(NULL)); + ok1(taken(NULL)); /* Undoes take() */ + ok1(!is_taken(NULL)); + ok1(!taken(NULL)); parent = tal(NULL, char); ok1(parent); - c = tal_strdup(parent, "hello"); - - c = tal_strdup(TAL_TAKE, c); - ok1(strcmp(c, "hello") == 0); - ok1(tal_parent(c) == parent); - - c = tal_strndup(TAL_TAKE, c, 5); - ok1(strcmp(c, "hello") == 0); - ok1(tal_parent(c) == parent); + ok1(take(parent) == parent); + ok1(is_taken(parent)); + ok1(taken(parent)); /* Undoes take() */ + ok1(!is_taken(parent)); + ok1(!taken(parent)); - c = tal_strndup(TAL_TAKE, c, 3); - ok1(strcmp(c, "hel") == 0); + c = tal(parent, char); + *c = 'h'; + c = tal_dup(parent, char, take(c), 1, 0); + ok1(c[0] == 'h'); ok1(tal_parent(c) == parent); - c = tal_memdup(TAL_TAKE, c, 1); + c = tal_dup(parent, char, take(c), 1, 2); ok1(c[0] == 'h'); + strcpy(c, "hi"); ok1(tal_parent(c) == parent); - /* No leftover allocations. */ - tal_free(c); - ok1(tal_first(parent) == NULL); + /* dup must reparent child. */ + c = tal_dup(NULL, char, take(c), 1, 0); + ok1(c[0] == 'h'); + ok1(tal_parent(c) == NULL); - c = tal_strdup(parent, "hello %s"); - c = tal_asprintf(TAL_TAKE, c, "there"); - ok1(strcmp(c, "hello there") == 0); - ok1(tal_parent(c) == parent); /* No leftover allocations. */ tal_free(c); ok1(tal_first(parent) == NULL); tal_free(parent); + ok1(!taken_any()); + + /* NULL pass-through. */ + c = NULL; + ok1(tal_dup(NULL, char, take(c), 5, 5) == NULL); + ok1(!taken_any()); + tal_cleanup(); return exit_status(); }