X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fgenerator%2Ftest%2Fapi.c;fp=ccan%2Fgenerator%2Ftest%2Fapi.c;h=a5770fd2ea5132e98dcbdf4aad4bf49116620cfa;hb=707a8c0a899a4b645bcf778f7ea79565d6f3f13e;hp=0000000000000000000000000000000000000000;hpb=d4c7616d9ef5a55dd89ea878a07eedc7376d6973;p=ccan diff --git a/ccan/generator/test/api.c b/ccan/generator/test/api.c new file mode 100644 index 00000000..a5770fd2 --- /dev/null +++ b/ccan/generator/test/api.c @@ -0,0 +1,62 @@ +#include +#include +#include + +#include "example-gens.h" + +generator_def_static(genx, const char *) +{ + generator_yield("one"); + generator_yield("two"); + generator_yield("three"); + generator_yield("four"); +} + +static void test1(void) +{ + generator_t(int) state1 = gen1(); + int *ret; + + ok1((ret = generator_next(state1)) != NULL); + ok1(*ret == 1); + ok1((ret = generator_next(state1)) != NULL); + ok1(*ret == 3); + ok1((ret = generator_next(state1)) != NULL); + ok1(*ret == 17); + ok1((ret = generator_next(state1)) == NULL); + + /* Test that things don't go bad if we try to invoke an + * already completed generator */ + ok1((ret = generator_next(state1)) == NULL); + + generator_free(state1); +} + +static void testx(void) +{ + generator_t(const char *) statex = genx(); + const char *val; + + ok1(generator_next_val(val, statex)); + ok1(streq(val, "one")); + ok1(generator_next_val(val, statex)); + ok1(streq(val, "two")); + ok1(generator_next_val(val, statex)); + ok1(streq(val, "three")); + ok1(generator_next_val(val, statex)); + ok1(streq(val, "four")); + ok1(!generator_next_val(val, statex)); + generator_free(statex); +} + +int main(void) +{ + /* This is how many tests you plan to run */ + plan_tests(8 + 9); + + test1(); + testx(); + + /* This exits depending on whether all tests passed */ + return exit_status(); +}