1 #include <ccan/foreach/foreach.h>
2 #include <ccan/tap/tap.h>
6 #include <ccan/foreach/foreach.c>
8 static int test_int_recursion(unsigned int level)
12 foreach_int(i, 0, 1, 2, 3, 4) {
15 sum += test_int_recursion(i);
20 static int test_ptr_recursion(const char *level)
25 foreach_ptr(i, "0", "1", "2", "3", "4") {
27 if (atoi(i) > atoi(level))
28 sum += test_ptr_recursion(i);
33 static int count_iters(void)
35 unsigned int count = 0;
36 #if !HAVE_COMPOUND_LITERALS || !HAVE_FOR_LOOP_DECLARATION
39 list_for_each(&iters, i, list)
48 const char *istr, *jstr;
53 foreach_int(i, 0, 1, 2, 3, 4)
54 foreach_int(j, 0, 1, 2, 3, 4)
56 diag("sum = %i\n", sum);
57 diag("iters = %i\n", count_iters());
59 ok1(count_iters() <= 2);
61 /* Same again... reusing iterators. */
63 foreach_int(i, 0, 1, 2, 3, 4)
64 foreach_int(j, 0, 1, 2, 3, 4)
66 diag("sum = %i\n", sum);
67 diag("iters = %i\n", count_iters());
69 ok1(count_iters() <= 2);
71 sum = test_int_recursion(0);
72 diag("sum = %i\n", sum);
73 diag("iters = %i\n", count_iters());
75 ok1(count_iters() <= 2 + 5); /* 5 is max depth of recursion. */
78 foreach_ptr(istr, "0", "1", "2", "3", "4")
79 foreach_ptr(jstr, "0", "1", "2", "3", "4")
80 sum += atoi(istr)*atoi(jstr);
81 diag("sum = %i\n", sum);
82 diag("iters = %i\n", count_iters());
84 ok1(count_iters() <= 2 + 5 + 2);
86 /* Same again... reusing iterators. */
88 foreach_ptr(istr, "0", "1", "2", "3", "4")
89 foreach_ptr(jstr, "0", "1", "2", "3", "4")
90 sum += atoi(istr)*atoi(jstr);
91 diag("sum = %i\n", sum);
92 diag("iters = %i\n", count_iters());
94 ok1(count_iters() <= 2 + 5 + 2);
96 sum = test_ptr_recursion("0");
97 diag("sum = %i\n", sum);
98 diag("iters = %i\n", count_iters());
100 ok1(count_iters() <= 2 + 5 + 2);
101 return exit_status();