1 #include <ccan/tal/tal.h>
2 #include <ccan/tal/tal.c>
3 #include <ccan/tap/tap.h>
11 /* We can take NULL. */
12 ok1(take(NULL) == NULL);
14 ok1(taken(NULL)); /* Undoes take() */
18 parent = tal(NULL, char);
21 ok1(take(parent) == parent);
22 ok1(is_taken(parent));
23 ok1(taken(parent)); /* Undoes take() */
24 ok1(!is_taken(parent));
27 c = tal_strdup(parent, "hello");
29 c = tal_strdup(parent, take(c));
30 ok1(strcmp(c, "hello") == 0);
31 ok1(tal_parent(c) == parent);
33 c = tal_strndup(parent, take(c), 5);
34 ok1(strcmp(c, "hello") == 0);
35 ok1(tal_parent(c) == parent);
37 c = tal_strndup(parent, take(c), 3);
38 ok1(strcmp(c, "hel") == 0);
39 ok1(tal_parent(c) == parent);
41 c = tal_dup(parent, char, take(c), 1, 0);
43 ok1(tal_parent(c) == parent);
45 c = tal_dup(parent, char, take(c), 1, 2);
48 ok1(tal_parent(c) == parent);
50 /* dup must reparent child. */
51 c = tal_dup(NULL, char, take(c), 1, 0);
53 ok1(tal_parent(c) == NULL);
55 /* No leftover allocations. */
57 ok1(tal_first(parent) == NULL);
59 c = tal_strdup(parent, "hello %s");
60 c = tal_asprintf(parent, take(c), "there");
61 ok1(strcmp(c, "hello there") == 0);
62 ok1(tal_parent(c) == parent);
63 /* No leftover allocations. */
65 ok1(tal_first(parent) == NULL);
70 /* NULL pass-through. */
72 ok1(tal_strdup(NULL, take(c)) == NULL);
73 ok1(tal_strndup(NULL, take(c), 5) == NULL);
74 ok1(tal_dup(NULL, char, take(c), 5, 5) == NULL);
75 ok1(tal_asprintf(NULL, take(c), 0) == NULL);