1 #include <ccan/foreach/foreach.h>
2 #include <ccan/tap/tap.h>
5 #include <ccan/foreach/foreach.c>
7 static int test_int_recursion(unsigned int level)
11 foreach_int(i, 0, 1, 2, 3, 4) {
14 sum += test_int_recursion(i);
19 static int test_ptr_recursion(const char *level)
24 foreach_ptr(i, "0", "1", "2", "3", "4") {
26 if (atoi(i) > atoi(level))
27 sum += test_ptr_recursion(i);
32 static int count_iters(void)
34 unsigned int count = 0;
35 #if !HAVE_COMPOUND_LITERALS || !HAVE_FOR_LOOP_DECLARATION
38 list_for_each(&iters, i, list)
47 const char *istr, *jstr;
52 foreach_int(i, 0, 1, 2, 3, 4)
53 foreach_int(j, 0, 1, 2, 3, 4)
55 diag("sum = %i\n", sum);
56 diag("iters = %i\n", count_iters());
58 ok1(count_iters() <= 2);
60 /* Same again... reusing iterators. */
62 foreach_int(i, 0, 1, 2, 3, 4)
63 foreach_int(j, 0, 1, 2, 3, 4)
65 diag("sum = %i\n", sum);
66 diag("iters = %i\n", count_iters());
68 ok1(count_iters() <= 2);
70 sum = test_int_recursion(0);
71 diag("sum = %i\n", sum);
72 diag("iters = %i\n", count_iters());
74 ok1(count_iters() <= 2 + 5); /* 5 is max depth of recursion. */
77 foreach_ptr(istr, "0", "1", "2", "3", "4")
78 foreach_ptr(jstr, "0", "1", "2", "3", "4")
79 sum += atoi(istr)*atoi(jstr);
80 diag("sum = %i\n", sum);
81 diag("iters = %i\n", count_iters());
83 ok1(count_iters() <= 2 + 5 + 2);
85 /* Same again... reusing iterators. */
87 foreach_ptr(istr, "0", "1", "2", "3", "4")
88 foreach_ptr(jstr, "0", "1", "2", "3", "4")
89 sum += atoi(istr)*atoi(jstr);
90 diag("sum = %i\n", sum);
91 diag("iters = %i\n", count_iters());
93 ok1(count_iters() <= 2 + 5 + 2);
95 sum = test_ptr_recursion("0");
96 diag("sum = %i\n", sum);
97 diag("iters = %i\n", count_iters());
99 ok1(count_iters() <= 2 + 5 + 2);
100 return exit_status();