run-iter.c 905 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include <ccan/tal/tal.h>
  2. #include <ccan/tal/tal.c>
  3. #include <ccan/tap/tap.h>
  4. #define NUM 1000
  5. static int set_children(const tal_t *parent, char val)
  6. {
  7. char *iter;
  8. int num = 0;
  9. for (iter = tal_first(parent); iter; iter = tal_next(iter)) {
  10. ok1(*iter == '0');
  11. *iter = val;
  12. num++;
  13. num += set_children(iter, val);
  14. }
  15. return num;
  16. }
  17. static void check_children(const tal_t *parent, char val)
  18. {
  19. const char *iter;
  20. for (iter = tal_first(parent); iter; iter = tal_next(iter)) {
  21. ok1(*iter == val);
  22. check_children(iter, val);
  23. }
  24. }
  25. int main(void)
  26. {
  27. char *p[NUM] = { NULL };
  28. int i;
  29. plan_tests(NUM + 1 + NUM);
  30. /* Create a random tree */
  31. for (i = 0; i < NUM; i++) {
  32. p[i] = tal(p[rand() % (i + 1)], char);
  33. *p[i] = '0';
  34. }
  35. i = set_children(NULL, '1');
  36. ok1(i == NUM);
  37. check_children(NULL, '1');
  38. for (i = NUM-1; i >= 0; i--)
  39. tal_free(p[i]);
  40. tal_cleanup();
  41. return exit_status();
  42. }