#include #include #include #include #include #include static int global_i; static void *allocs[1000]; static unsigned int num_allocs; static void iterate(unsigned int depth, bool done_global) { int *i, expecti; const char *expectp[] = { "hello", "there" }; const char **p; int stack_i; if (depth == 4) return; if (!done_global) { expecti = 0; foreach_int(global_i, 0, 1) { ok1(global_i == expecti); expecti++; if (global_i == 0) iterate(depth + 1, true); } ok1(expecti == 2); } i = allocs[num_allocs++] = malloc(sizeof(*i)); expecti = 0; foreach_int(*i, 0, 1) { ok1(*i == expecti); expecti++; if (*i == 0) iterate(depth + 1, done_global); } ok1(expecti == 2); p = allocs[num_allocs++] = malloc(sizeof(*p)); expecti = 0; foreach_ptr(*p, "hello", "there") { ok1(strcmp(expectp[expecti], *p) == 0); expecti++; if (expecti == 1) iterate(depth + 1, done_global); } ok1(expecti == 2); ok1(*p == NULL); expecti = 0; foreach_int(stack_i, 0, 1) { ok1(stack_i == expecti); expecti++; if (stack_i == 0) iterate(depth + 1, done_global); } ok1(expecti == 2); } int main(void) { unsigned int i; plan_tests(861); iterate(0, false); ok1(num_allocs < 1000); for (i = 0; i < num_allocs; i++) free(allocs[i]); return exit_status(); }