run-prefix.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include <ccan/strset/strset.h>
  2. #include <ccan/strset/strset.c>
  3. #include <ccan/tap/tap.h>
  4. #include <stdio.h>
  5. /* Must be > 100, see below. */
  6. #define NUM 200
  7. static bool in_order(const char *value, unsigned int *count)
  8. {
  9. int i = atoi(value);
  10. ok1(*count == i);
  11. (*count)++;
  12. return true;
  13. }
  14. static bool find_empty(const char *value, char *empty)
  15. {
  16. if (value == empty)
  17. pass("Found empty entry!");
  18. return true;
  19. }
  20. int main(void)
  21. {
  22. struct strset set;
  23. const struct strset *sub;
  24. unsigned int i;
  25. char *str[NUM], *empty;
  26. plan_tests(7 + 1 + 10 + 100);
  27. strset_init(&set);
  28. for (i = 0; i < NUM; i++) {
  29. char template[10];
  30. sprintf(template, "%08u", i);
  31. str[i] = strdup(template);
  32. }
  33. for (i = 0; i < NUM; i++)
  34. strset_add(&set, str[i]);
  35. /* Nothing */
  36. sub = strset_prefix(&set, "a");
  37. ok1(strset_empty(sub));
  38. /* Everything */
  39. sub = strset_prefix(&set, "0");
  40. ok1(sub->u.n == set.u.n);
  41. sub = strset_prefix(&set, "");
  42. ok1(sub->u.n == set.u.n);
  43. /* Singleton. */
  44. sub = strset_prefix(&set, "00000000");
  45. i = 0;
  46. strset_iterate(sub, in_order, &i);
  47. ok1(i == 1);
  48. /* First 10. */
  49. sub = strset_prefix(&set, "0000000");
  50. i = 0;
  51. strset_iterate(sub, in_order, &i);
  52. ok1(i == 10);
  53. /* First 100. */
  54. sub = strset_prefix(&set, "000000");
  55. i = 0;
  56. strset_iterate(sub, in_order, &i);
  57. ok1(i == 100);
  58. /* Everything, *plus* empty string. */
  59. empty = strdup("");
  60. strset_add(&set, empty);
  61. sub = strset_prefix(&set, "");
  62. /* Check we get *our* empty string back! */
  63. strset_iterate(sub, find_empty, empty);
  64. strset_clear(&set);
  65. for (i = 0; i < NUM; i++)
  66. free(str[i]);
  67. free(empty);
  68. /* This exits depending on whether all tests passed */
  69. return exit_status();
  70. }