]> git.ozlabs.org Git - ccan/blob - ccan/generator/test/api.c
a5770fd2ea5132e98dcbdf4aad4bf49116620cfa
[ccan] / ccan / generator / test / api.c
1 #include <ccan/generator/generator.h>
2 #include <ccan/tap/tap.h>
3 #include <ccan/str/str.h>
4
5 #include "example-gens.h"
6
7 generator_def_static(genx, const char *)
8 {
9         generator_yield("one");
10         generator_yield("two");
11         generator_yield("three");
12         generator_yield("four");
13 }
14
15 static void test1(void)
16 {
17         generator_t(int) state1 = gen1();
18         int *ret;
19
20         ok1((ret = generator_next(state1)) != NULL);
21         ok1(*ret == 1);
22         ok1((ret = generator_next(state1)) != NULL);
23         ok1(*ret == 3);
24         ok1((ret = generator_next(state1)) != NULL);
25         ok1(*ret == 17);
26         ok1((ret = generator_next(state1)) == NULL);
27
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);
31
32         generator_free(state1);
33 }
34
35 static void testx(void)
36 {
37         generator_t(const char *) statex = genx();
38         const char *val;
39
40         ok1(generator_next_val(val, statex));
41         ok1(streq(val, "one"));
42         ok1(generator_next_val(val, statex));
43         ok1(streq(val, "two"));
44         ok1(generator_next_val(val, statex));
45         ok1(streq(val, "three"));
46         ok1(generator_next_val(val, statex));
47         ok1(streq(val, "four"));
48         ok1(!generator_next_val(val, statex));
49         generator_free(statex);
50 }
51
52 int main(void)
53 {
54         /* This is how many tests you plan to run */
55         plan_tests(8 + 9);
56
57         test1();
58         testx();
59
60         /* This exits depending on whether all tests passed */
61         return exit_status();
62 }