1 #include <ccan/generator/generator.h>
2 #include <ccan/tap/tap.h>
3 #include <ccan/str/str.h>
5 #include "example-gens.h"
7 generator_def_static(genx, const char *)
9 generator_yield("one");
10 generator_yield("two");
11 generator_yield("three");
12 generator_yield("four");
15 static void test1(void)
17 generator_t(int) state1 = gen1();
20 ok1((ret = generator_next(state1)) != NULL);
22 ok1((ret = generator_next(state1)) != NULL);
24 ok1((ret = generator_next(state1)) != NULL);
26 ok1((ret = generator_next(state1)) == NULL);
28 /* Test that things don't go bad if we try to invoke an
29 * already completed generator */
30 ok1((ret = generator_next(state1)) == NULL);
32 generator_free(state1);
35 static void test2(void)
37 generator_t(int) state2 = gen2(100);
40 ok1((ret = generator_next(state2)) != NULL);
42 ok1((ret = generator_next(state2)) != NULL);
44 ok1((ret = generator_next(state2)) != NULL);
46 ok1((ret = generator_next(state2)) == NULL);
48 generator_free(state2);
51 static void test3(void)
55 for (i = 0; i < 4; i++) {
56 generator_t(const char *) state3 = gen3("test", i);
60 for (j = 0; j < i; j++) {
61 ok1(generator_next_val(s, state3));
62 ok1(streq(s, "test"));
64 ok1(!generator_next_val(s, state3));
65 generator_free(state3);
69 static void testx(void)
71 generator_t(const char *) statex = genx();
74 ok1(generator_next_val(val, statex));
75 ok1(streq(val, "one"));
76 ok1(generator_next_val(val, statex));
77 ok1(streq(val, "two"));
78 ok1(generator_next_val(val, statex));
79 ok1(streq(val, "three"));
80 ok1(generator_next_val(val, statex));
81 ok1(streq(val, "four"));
82 ok1(!generator_next_val(val, statex));
83 generator_free(statex);
88 /* This is how many tests you plan to run */
89 plan_tests(8 + 7 + 16 + 9);
96 /* This exits depending on whether all tests passed */