d21164ab3cd1b0ad9af6b5c45fd587cdbe0fe7d6
[libc-test] / src / general / string_memmem.c
1 #ifndef _GNU_SOURCE
2 #define _GNU_SOURCE 1
3 #endif
4 #include <string.h>
5 #include "test.h"
6
7 #define N(s, sub) { \
8         char *p = s; \
9         char *q = memmem(p, strlen(p), sub, strlen(sub)); \
10         if (q) \
11                 error("memmem(%s,%s) returned str+%d, wanted 0\n", #s, #sub, q-p); \
12 }
13
14 #define T(s, sub, n) { \
15         char *p = s; \
16         char *q = memmem(p, strlen(p), sub, strlen(sub)); \
17         if (q == 0) \
18                 error("memmem(%s,%s) returned 0, wanted str+%d\n", #s, #sub, n); \
19         else if (q - p != n) \
20                 error("memmem(%s,%s) returned str+%d, wanted str+%d\n", #s, #sub, q-p, n); \
21 }
22
23 int main(void)
24 {
25         N("", "a")
26         N("a", "aa")
27         N("a", "b")
28         N("aa", "ab")
29         N("aa", "aaa")
30         N("abba", "aba")
31         N("abc abc", "abcd")
32         N("0-1-2-3-4-5-6-7-8-9", "-3-4-56-7-8-")
33         N("0-1-2-3-4-5-6-7-8-9", "-3-4-5+6-7-8-")
34         N("_ _ _\xff_ _ _", "_\x7f_")
35         N("_ _ _\x7f_ _ _", "_\xff_")
36
37         T("", "", 0)
38         T("abcd", "", 0)
39         T("abcd", "a", 0)
40         T("abcd", "b", 1)
41         T("abcd", "c", 2)
42         T("abcd", "d", 3)
43         T("abcd", "ab", 0)
44         T("abcd", "bc", 1)
45         T("abcd", "cd", 2)
46         T("ababa", "baba", 1)
47         T("ababab", "babab", 1)
48         T("abababa", "bababa", 1)
49         T("abababab", "bababab", 1)
50         T("ababababa", "babababa", 1)
51         T("nanabanabanana", "aba", 3)
52         T("nanabanabanana", "ban", 4)
53         T("nanabanabanana", "anab", 1)
54         T("nanabanabanana", "banana", 8)
55         T("_ _\xff_ _", "_\xff_", 2)
56
57         return test_status;
58 }