#define NUM 1000
+static int set_children(const tal_t *parent, char val)
+{
+ char *iter;
+ int num = 0;
+
+ for (iter = tal_first(parent); iter; iter = tal_next(iter)) {
+ ok1(*iter == '0');
+ *iter = val;
+ num++;
+ num += set_children(iter, val);
+ }
+ return num;
+}
+
+static void check_children(const tal_t *parent, char val)
+{
+ const char *iter;
+
+ for (iter = tal_first(parent); iter; iter = tal_next(iter)) {
+ ok1(*iter == val);
+ check_children(iter, val);
+ }
+}
+
int main(void)
{
- char *p[NUM], *iter;
+ char *p[NUM] = { NULL };
int i;
plan_tests(NUM + 1 + NUM);
- /* Create a random tree, but make sure we get multiple
- * top-level groups! */
+ /* Create a random tree */
for (i = 0; i < NUM; i++) {
- p[i] = tal(NULL, char);
- *p[i] = '0';
- if (next_group(&null_parent.c.group) != &null_parent.c.group)
- break;
- }
- for (i++; i < NUM; i++) {
- p[i] = tal(p[rand() % i], char);
+ p[i] = tal(p[rand() % (i + 1)], char);
*p[i] = '0';
}
- i = 0;
- for (iter = tal_first(NULL); iter; iter = tal_next(NULL, iter)) {
- i++;
- ok1(*iter == '0');
- *iter = '1';
- }
+ i = set_children(NULL, '1');
ok1(i == NUM);
- for (i = NUM-1; i >= 0; i--) {
- ok1(*p[i] == '1');
+ check_children(NULL, '1');
+ for (i = NUM-1; i >= 0; i--)
tal_free(p[i]);
- }
+
+ tal_cleanup();
return exit_status();
}