]> git.ozlabs.org Git - ccan/blobdiff - ccan/foreach/test/run-nested.c
foreach: fixed maybe uninitialized warning in test (-O2)
[ccan] / ccan / foreach / test / run-nested.c
index 13ab46678b6c6e1e9de83ff35394a886f29360a0..0bb21c980057d29af5ac34680a15ca1cbf39f83d 100644 (file)
@@ -2,6 +2,7 @@
 #include <ccan/tap/tap.h>
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #include <ccan/foreach/foreach.c>
 
 static int test_int_recursion(unsigned int level)
@@ -43,10 +44,10 @@ static int count_iters(void)
 
 int main(void)
 {
-       int i, j, sum;
+       int i, j, sum, max_iters = 0 /* keep gcc happy */;
        const char *istr, *jstr;
 
-       plan_tests(12);
+       plan_tests(13);
 
        sum = 0;
        foreach_int(i, 0, 1, 2, 3, 4)
@@ -67,12 +68,6 @@ int main(void)
        ok1(sum == 100);
        ok1(count_iters() <= 2);
 
-       sum = test_int_recursion(0);
-       diag("sum = %i\n", sum);
-       diag("iters = %i\n", count_iters());
-       ok1(sum == 160);
-       ok1(count_iters() <= 2 + 5); /* 5 is max depth of recursion. */
-
        sum = 0;
        foreach_ptr(istr, "0", "1", "2", "3", "4")
                foreach_ptr(jstr, "0", "1", "2", "3", "4")
@@ -80,7 +75,7 @@ int main(void)
        diag("sum = %i\n", sum);
        diag("iters = %i\n", count_iters());
        ok1(sum == 100);
-       ok1(count_iters() <= 2 + 5 + 2);
+       ok1(count_iters() <= 2 + 2);
 
        /* Same again... reusing iterators. */
        sum = 0;
@@ -90,13 +85,24 @@ int main(void)
        diag("sum = %i\n", sum);
        diag("iters = %i\n", count_iters());
        ok1(sum == 100);
-       ok1(count_iters() <= 2 + 5 + 2);
+       ok1(count_iters() <= 2 + 2);
 
-       sum = test_ptr_recursion("0");
-       diag("sum = %i\n", sum);
-       diag("iters = %i\n", count_iters());
-       ok1(sum == 160);
-       ok1(count_iters() <= 2 + 5 + 2);
+       /* Do this twice, second time shouldn't increase iterators. */
+       for (i = 0; i < 2; i++) {
+               sum = test_int_recursion(0);
+               diag("sum = %i\n", sum);
+               diag("iters = %i\n", count_iters());
+               ok1(sum == 160);
+
+               sum = test_ptr_recursion("0");
+               diag("sum = %i\n", sum);
+               diag("iters = %i\n", count_iters());
+               ok1(sum == 160);
+               if (i == 0)
+                       max_iters = count_iters();
+               else
+                       ok1(count_iters() <= max_iters);
+       }
        return exit_status();
 }