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" };
12 static char *strdup_rev(const char *s)
14 char *ret = strdup(s);
17 for (i = 0; i < strlen(s); i++)
18 ret[i] = s[strlen(s) - i - 1];
22 int main(int argc, char *argv[])
27 char *strings[ARRAY_SIZE(substrings) * ARRAY_SIZE(substrings)];
30 for (i = 0; i < ARRAY_SIZE(substrings); i++) {
31 for (j = 0; j < ARRAY_SIZE(substrings); j++) {
32 strings[n] = malloc(strlen(substrings[i])
33 + strlen(substrings[j]) + 1);
34 sprintf(strings[n++], "%s%s",
35 substrings[i], substrings[j]);
39 plan_tests(n * n * 5 + 16);
40 for (i = 0; i < n; i++) {
41 for (j = 0; j < n; j++) {
42 unsigned int k, identical = 0;
45 /* Find first difference. */
46 for (k = 0; strings[i][k]==strings[j][k]; k++) {
47 if (k == strlen(strings[i])) {
54 ok1(streq(strings[i], strings[j]));
56 ok1(!streq(strings[i], strings[j]));
58 /* Postfix test should be equivalent to prefix
59 * test on reversed string. */
60 reva = strdup_rev(strings[i]);
61 revb = strdup_rev(strings[j]);
64 ok1(strstarts(strings[j], strings[i]));
65 ok1(strends(revb, reva));
67 ok1(!strstarts(strings[j], strings[i]));
68 ok1(!strends(revb, reva));
71 ok1(strstarts(strings[i], strings[j]));
72 ok1(strends(reva, revb));
74 ok1(!strstarts(strings[i], strings[j]));
75 ok1(!strends(reva, revb));
80 split = strsplit(NULL, "hello world", " ", &n);
82 ok1(streq(split[0], "hello"));
83 ok1(streq(split[1], ""));
84 ok1(streq(split[2], "world"));
85 ok1(split[3] == NULL);
88 split = strsplit(NULL, "hello world", " ", NULL);
89 ok1(streq(split[0], "hello"));
90 ok1(streq(split[1], ""));
91 ok1(streq(split[2], "world"));
92 ok1(split[3] == NULL);
95 split = strsplit(NULL, "hello world", "o ", NULL);
96 ok1(streq(split[0], "hell"));
97 ok1(streq(split[1], ""));
98 ok1(streq(split[2], ""));
99 ok1(streq(split[3], "w"));
100 ok1(streq(split[4], "rld"));
101 ok1(split[5] == NULL);
104 split = strsplit(ctx, "hello world", "o ", NULL);
105 ok1(talloc_parent(split) == ctx);
108 return exit_status();