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