fix ipc tests which cast time_t to long for printing
[libc-test] / src / functional / string_strchr.c
1 #include <string.h>
2 #include "test.h"
3
4 static char buf[512];
5
6 static void *aligned(void *p)
7 {
8         return (void*)(((uintptr_t)p + 63) & -64);
9 }
10
11 static void *aligncpy(void *p, size_t len, size_t a)
12 {
13         return memcpy((char*)aligned(buf)+a, p, len);
14 }
15
16 #define N(s, c) { \
17         int align; \
18         for (align=0; align<8; align++) { \
19                 char *p = aligncpy(s, sizeof s, align); \
20                 char *q = strchr(p, c); \
21                 if (q) \
22                         t_error("strchr(%s,%s) with align=%d returned str+%d, wanted 0\n", #s, #c, align, q-p); \
23         } \
24 }
25
26 #define T(s, c, n) { \
27         int align; \
28         for (align=0; align<8; align++) { \
29                 char *p = aligncpy(s, sizeof s, align); \
30                 char *q = strchr(p, c); \
31                 if (q == 0) \
32                         t_error("strchr(%s,%s) with align=%d returned 0, wanted str+%d\n", #s, #c, align, n); \
33                 else if (q - p != n) \
34                         t_error("strchr(%s,%s) with align=%d returned str+%d, wanted str+%d\n", #s, #c, align, q-p, n); \
35         } \
36 }
37
38 int main(void)
39 {
40         int i;
41         char a[128];
42         char s[256];
43
44         for (i = 0; i < 128; i++)
45                 a[i] = (i+1) & 127;
46         for (i = 0; i < 256; i++)
47                 *((unsigned char*)s+i) = i+1;
48
49         N("\0aaa", 'a')
50         N("a\0bb", 'b')
51         N("ab\0c", 'c')
52         N("abc\0d", 'd')
53         N("abc abc\0x", 'x')
54         N(a, 128)
55         N(a, 255)
56
57         T("", 0, 0)
58         T("a", 'a', 0)
59         T("a", 'a'+256, 0)
60         T("a", 0, 1)
61         T("abb", 'b', 1)
62         T("aabb", 'b', 2)
63         T("aaabb", 'b', 3)
64         T("aaaabb", 'b', 4)
65         T("aaaaabb", 'b', 5)
66         T("aaaaaabb", 'b', 6)
67         T("abc abc", 'c', 2)
68         T(s, 1, 0)
69         T(s, 2, 1)
70         T(s, 10, 9)
71         T(s, 11, 10)
72         T(s, 127, 126)
73         T(s, 128, 127)
74         T(s, 255, 254)
75         T(s, 0, 255)
76
77         return t_status;
78 }