api.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include <ccan/generator/generator.h>
  2. #include <ccan/tap/tap.h>
  3. #include <ccan/str/str.h>
  4. #include "example-gens.h"
  5. generator_def_static(genx, const char *)
  6. {
  7. generator_yield("one");
  8. generator_yield("two");
  9. generator_yield("three");
  10. generator_yield("four");
  11. }
  12. static void test1(void)
  13. {
  14. generator_t(int) state1 = gen1();
  15. int *ret;
  16. ok1((ret = generator_next(state1)) != NULL);
  17. ok1(*ret == 1);
  18. ok1((ret = generator_next(state1)) != NULL);
  19. ok1(*ret == 3);
  20. ok1((ret = generator_next(state1)) != NULL);
  21. ok1(*ret == 17);
  22. ok1((ret = generator_next(state1)) == NULL);
  23. /* Test that things don't go bad if we try to invoke an
  24. * already completed generator */
  25. ok1((ret = generator_next(state1)) == NULL);
  26. generator_free(state1);
  27. }
  28. static void test2(void)
  29. {
  30. generator_t(int) state2 = gen2(100);
  31. int *ret;
  32. ok1((ret = generator_next(state2)) != NULL);
  33. ok1(*ret == 101);
  34. ok1((ret = generator_next(state2)) != NULL);
  35. ok1(*ret == 103);
  36. ok1((ret = generator_next(state2)) != NULL);
  37. ok1(*ret == 117);
  38. ok1((ret = generator_next(state2)) == NULL);
  39. generator_free(state2);
  40. }
  41. static void test3(void)
  42. {
  43. int i;
  44. for (i = 0; i < 4; i++) {
  45. generator_t(const char *) state3 = gen3("test", i);
  46. const char *s;
  47. int j;
  48. for (j = 0; j < i; j++) {
  49. ok1(generator_next_val(s, state3));
  50. ok1(streq(s, "test"));
  51. }
  52. ok1(!generator_next_val(s, state3));
  53. generator_free(state3);
  54. }
  55. }
  56. static void testx(void)
  57. {
  58. generator_t(const char *) statex = genx();
  59. const char *val;
  60. ok1(generator_next_val(val, statex));
  61. ok1(streq(val, "one"));
  62. ok1(generator_next_val(val, statex));
  63. ok1(streq(val, "two"));
  64. ok1(generator_next_val(val, statex));
  65. ok1(streq(val, "three"));
  66. ok1(generator_next_val(val, statex));
  67. ok1(streq(val, "four"));
  68. ok1(!generator_next_val(val, statex));
  69. generator_free(statex);
  70. }
  71. int main(void)
  72. {
  73. /* This is how many tests you plan to run */
  74. plan_tests(8 + 7 + 16 + 9);
  75. test1();
  76. test2();
  77. test3();
  78. testx();
  79. /* This exits depending on whether all tests passed */
  80. return exit_status();
  81. }