X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Ffunctional%2Fstring_strchr.c;h=4b1e06349fba9eb088bb3d82e8840ce943922fdf;hb=281b80f0e70fe28356c3f0ded8b86f28a5c74d0a;hp=c05d88168ee5bc81e045ed71dcc7c79f3536a603;hpb=2cf89517c5b25c2524fe0c0c01ed277d7307a852;p=libc-test diff --git a/src/functional/string_strchr.c b/src/functional/string_strchr.c index c05d881..4b1e063 100644 --- a/src/functional/string_strchr.c +++ b/src/functional/string_strchr.c @@ -1,20 +1,38 @@ #include #include "test.h" +static char buf[512]; + +static void *aligned(void *p) +{ + return (void*)(((uintptr_t)p + 63) & -64); +} + +static void *aligncpy(void *p, size_t len, size_t a) +{ + return memcpy((char*)aligned(buf)+a, p, len); +} + #define N(s, c) { \ - char *p = s; \ - char *q = strchr(p, c); \ - if (q) \ - error("strchr(%s,%s) returned str+%d, wanted 0\n", #s, #c, q-p); \ + int align; \ + for (align=0; align<8; align++) { \ + char *p = aligncpy(s, sizeof s, align); \ + char *q = strchr(p, c); \ + if (q) \ + t_error("strchr(%s,%s) with align=%d returned str+%d, wanted 0\n", #s, #c, align, q-p); \ + } \ } #define T(s, c, n) { \ - char *p = s; \ - char *q = strchr(p, c); \ - if (q == 0) \ - error("strchr(%s,%s) returned 0, wanted str+%d\n", #s, #c, n); \ - else if (q - p != n) \ - error("strchr(%s,%s) returned str+%d, wanted str+%d\n", #s, #c, q-p, n); \ + int align; \ + for (align=0; align<8; align++) { \ + char *p = aligncpy(s, sizeof s, align); \ + char *q = strchr(p, c); \ + if (q == 0) \ + t_error("strchr(%s,%s) with align=%d returned 0, wanted str+%d\n", #s, #c, align, n); \ + else if (q - p != n) \ + t_error("strchr(%s,%s) with align=%d returned str+%d, wanted str+%d\n", #s, #c, align, q-p, n); \ + } \ } int main(void) @@ -28,9 +46,11 @@ int main(void) for (i = 0; i < 256; i++) *((unsigned char*)s+i) = i+1; - N("", 'a') - N("a", 'b') - N("abc abc", 'x') + N("\0aaa", 'a') + N("a\0bb", 'b') + N("ab\0c", 'c') + N("abc\0d", 'd') + N("abc abc\0x", 'x') N(a, 128) N(a, 255) @@ -38,12 +58,12 @@ int main(void) T("a", 'a', 0) T("a", 'a'+256, 0) T("a", 0, 1) - T("ab", 'b', 1) - T("aab", 'b', 2) - T("aaab", 'b', 3) - T("aaaab", 'b', 4) - T("aaaaab", 'b', 5) - T("aaaaaab", 'b', 6) + T("abb", 'b', 1) + T("aabb", 'b', 2) + T("aaabb", 'b', 3) + T("aaaabb", 'b', 4) + T("aaaaabb", 'b', 5) + T("aaaaaabb", 'b', 6) T("abc abc", 'c', 2) T(s, 1, 0) T(s, 2, 1) @@ -54,5 +74,5 @@ int main(void) T(s, 255, 254) T(s, 0, 255) - return test_status; + return t_status; }