run.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "string/string.h"
  4. #include "tap/tap.h"
  5. /* FIXME: ccanize */
  6. #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
  7. static char *substrings[] = { "far", "bar", "baz", "b", "ba", "z", "ar" };
  8. static char *strdup_rev(const char *s)
  9. {
  10. char *ret = strdup(s);
  11. unsigned int i;
  12. for (i = 0; i < strlen(s); i++)
  13. ret[i] = s[strlen(s) - i - 1];
  14. return ret;
  15. }
  16. int main(int argc, char *argv[])
  17. {
  18. unsigned int i, j, n;
  19. char *strings[ARRAY_SIZE(substrings) * ARRAY_SIZE(substrings)];
  20. n = 0;
  21. for (i = 0; i < ARRAY_SIZE(substrings); i++) {
  22. for (j = 0; j < ARRAY_SIZE(substrings); j++) {
  23. strings[n] = malloc(strlen(substrings[i])
  24. + strlen(substrings[j]) + 1);
  25. sprintf(strings[n++], "%s%s",
  26. substrings[i], substrings[j]);
  27. }
  28. }
  29. plan_tests(n * n * 5);
  30. for (i = 0; i < n; i++) {
  31. for (j = 0; j < n; j++) {
  32. unsigned int k, identical = 0;
  33. char *reva, *revb;
  34. /* Find first difference. */
  35. for (k = 0; strings[i][k]==strings[j][k]; k++) {
  36. if (k == strlen(strings[i])) {
  37. identical = 1;
  38. break;
  39. }
  40. }
  41. if (identical)
  42. ok1(streq(strings[i], strings[j]));
  43. else
  44. ok1(!streq(strings[i], strings[j]));
  45. /* Postfix test should be equivalent to prefix
  46. * test on reversed string. */
  47. reva = strdup_rev(strings[i]);
  48. revb = strdup_rev(strings[j]);
  49. if (!strings[i][k]) {
  50. ok1(strstarts(strings[j], strings[i]));
  51. ok1(strends(revb, reva));
  52. } else {
  53. ok1(!strstarts(strings[j], strings[i]));
  54. ok1(!strends(revb, reva));
  55. }
  56. if (!strings[j][k]) {
  57. ok1(strstarts(strings[i], strings[j]));
  58. ok1(strends(reva, revb));
  59. } else {
  60. ok1(!strstarts(strings[i], strings[j]));
  61. ok1(!strends(reva, revb));
  62. }
  63. }
  64. }
  65. return exit_status();
  66. }