]> git.ozlabs.org Git - ccan/blobdiff - ccan/tal/test/run-iter.c
tal: allow notifiers on NULL.
[ccan] / ccan / tal / test / run-iter.c
index 6fc7537140c6d5a6b131dfe110be1ba4406d20d2..5992172a51bad4736e55fdba83dd778a252eab4d 100644 (file)
@@ -4,37 +4,50 @@
 
 #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();
 }