1 #include <ccan/str/str.h>
4 #include <ccan/tap/tap.h>
7 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
9 static char *substrings[] = { "far", "bar", "baz", "b", "ba", "z", "ar", NULL };
11 #define NUM_SUBSTRINGS (ARRAY_SIZE(substrings) - 1)
13 static char *strdup_rev(const char *s)
15 char *ret = strdup(s);
18 for (i = 0; i < strlen(s); i++)
19 ret[i] = s[strlen(s) - i - 1];
23 int main(int argc, char *argv[])
26 char *strings[NUM_SUBSTRINGS * NUM_SUBSTRINGS];
29 for (i = 0; i < NUM_SUBSTRINGS; i++) {
30 for (j = 0; j < NUM_SUBSTRINGS; j++) {
31 strings[n] = malloc(strlen(substrings[i])
32 + strlen(substrings[j]) + 1);
33 sprintf(strings[n++], "%s%s",
34 substrings[i], substrings[j]);
38 plan_tests(n * n * 5);
39 for (i = 0; i < n; i++) {
40 for (j = 0; j < n; j++) {
41 unsigned int k, identical = 0;
44 /* Find first difference. */
45 for (k = 0; strings[i][k]==strings[j][k]; k++) {
46 if (k == strlen(strings[i])) {
53 ok1(streq(strings[i], strings[j]));
55 ok1(!streq(strings[i], strings[j]));
57 /* Postfix test should be equivalent to prefix
58 * test on reversed string. */
59 reva = strdup_rev(strings[i]);
60 revb = strdup_rev(strings[j]);
63 ok1(strstarts(strings[j], strings[i]));
64 ok1(strends(revb, reva));
66 ok1(!strstarts(strings[j], strings[i]));
67 ok1(!strends(revb, reva));
70 ok1(strstarts(strings[i], strings[j]));
71 ok1(strends(reva, revb));
73 ok1(!strstarts(strings[i], strings[j]));
74 ok1(!strends(reva, revb));