run-take.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include <ccan/tal/talloc/talloc.h>
  2. #include <ccan/tal/talloc/talloc.c>
  3. #include <ccan/tap/tap.h>
  4. int main(void)
  5. {
  6. char *parent, *c;
  7. plan_tests(21);
  8. /* We can take NULL. */
  9. ok1(take(NULL) == NULL);
  10. ok1(is_taken(NULL));
  11. ok1(taken(NULL)); /* Undoes take() */
  12. ok1(!is_taken(NULL));
  13. ok1(!taken(NULL));
  14. parent = tal(NULL, char);
  15. ok1(parent);
  16. ok1(take(parent) == parent);
  17. ok1(is_taken(parent));
  18. ok1(taken(parent)); /* Undoes take() */
  19. ok1(!is_taken(parent));
  20. ok1(!taken(parent));
  21. c = tal(parent, char);
  22. *c = 'h';
  23. c = tal_dup(parent, char, take(c));
  24. ok1(c[0] == 'h');
  25. ok1(tal_parent(c) == parent);
  26. c = tal_dup_arr(parent, char, take(c), 1, 2);
  27. ok1(c[0] == 'h');
  28. strcpy(c, "hi");
  29. ok1(tal_parent(c) == parent);
  30. /* dup must reparent child. */
  31. c = tal_dup(NULL, char, take(c));
  32. ok1(c[0] == 'h');
  33. ok1(tal_parent(c) == NULL);
  34. /* No leftover allocations. */
  35. tal_free(c);
  36. ok1(talloc_total_blocks(parent) == 1);
  37. tal_free(parent);
  38. ok1(!taken_any());
  39. /* NULL pass-through. */
  40. c = NULL;
  41. ok1(tal_dup_arr(NULL, char, take(c), 5, 5) == NULL);
  42. ok1(!taken_any());
  43. return exit_status();
  44. }