1 #include "string/string.h"
4 #include "string/string.c"
8 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
10 static char *substrings[] = { "far", "bar", "baz", "b", "ba", "z", "ar", NULL };
12 #define NUM_SUBSTRINGS (ARRAY_SIZE(substrings) - 1)
14 static char *strdup_rev(const char *s)
16 char *ret = strdup(s);
19 for (i = 0; i < strlen(s); i++)
20 ret[i] = s[strlen(s) - i - 1];
24 int main(int argc, char *argv[])
29 char *strings[NUM_SUBSTRINGS * NUM_SUBSTRINGS];
34 for (i = 0; i < NUM_SUBSTRINGS; i++) {
35 for (j = 0; j < NUM_SUBSTRINGS; j++) {
36 strings[n] = malloc(strlen(substrings[i])
37 + strlen(substrings[j]) + 1);
38 sprintf(strings[n++], "%s%s",
39 substrings[i], substrings[j]);
43 plan_tests(n * n * 5 + 19);
44 for (i = 0; i < n; i++) {
45 for (j = 0; j < n; j++) {
46 unsigned int k, identical = 0;
49 /* Find first difference. */
50 for (k = 0; strings[i][k]==strings[j][k]; k++) {
51 if (k == strlen(strings[i])) {
58 ok1(streq(strings[i], strings[j]));
60 ok1(!streq(strings[i], strings[j]));
62 /* Postfix test should be equivalent to prefix
63 * test on reversed string. */
64 reva = strdup_rev(strings[i]);
65 revb = strdup_rev(strings[j]);
68 ok1(strstarts(strings[j], strings[i]));
69 ok1(strends(revb, reva));
71 ok1(!strstarts(strings[j], strings[i]));
72 ok1(!strends(revb, reva));
75 ok1(strstarts(strings[i], strings[j]));
76 ok1(strends(reva, revb));
78 ok1(!strstarts(strings[i], strings[j]));
79 ok1(!strends(reva, revb));
84 split = strsplit(NULL, "hello world", " ", &n);
86 ok1(streq(split[0], "hello"));
87 ok1(streq(split[1], ""));
88 ok1(streq(split[2], "world"));
89 ok1(split[3] == NULL);
92 split = strsplit(NULL, "hello world", " ", NULL);
93 ok1(streq(split[0], "hello"));
94 ok1(streq(split[1], ""));
95 ok1(streq(split[2], "world"));
96 ok1(split[3] == NULL);
99 split = strsplit(NULL, "hello world", "o ", NULL);
100 ok1(streq(split[0], "hell"));
101 ok1(streq(split[1], ""));
102 ok1(streq(split[2], ""));
103 ok1(streq(split[3], "w"));
104 ok1(streq(split[4], "rld"));
105 ok1(split[5] == NULL);
108 split = strsplit(ctx, "hello world", "o ", NULL);
109 ok1(talloc_parent(split) == ctx);
112 str = strjoin(NULL, substrings, ", ");
113 ok1(streq(str, "far, bar, baz, b, ba, z, ar, "));
115 str = strjoin(ctx, substrings, "");
116 ok1(streq(str, "farbarbazbbazar"));
117 ok1(talloc_parent(str) == ctx);
120 str = grab_file(NULL, "ccan/string/test/run-grab.c");
121 split = strsplit(NULL, str, "\n", NULL);
122 length = strlen(split[0]);
123 ok1(streq(split[0], "/* This is test for grab_file() function */"));
124 for(i = 1; split[i]; i++)
125 length += strlen(split[i]);
126 ok1(streq(split[i-1], "/* End of grab_file() test */"));
127 if (stat("ccan/string/test/run-grab.c", &st) != 0)
128 err(1, "Could not stat self");
129 ok1(st.st_size == length);
131 return exit_status();