1570af302Sopenharmony_ci#ifndef _GNU_SOURCE 2570af302Sopenharmony_ci#define _GNU_SOURCE 1 3570af302Sopenharmony_ci#endif 4570af302Sopenharmony_ci#include <string.h> 5570af302Sopenharmony_ci#include "test.h" 6570af302Sopenharmony_ci 7570af302Sopenharmony_ci#define N(s, tail, sub) { \ 8570af302Sopenharmony_ci char *p = s tail; \ 9570af302Sopenharmony_ci char *q = memmem(p, strlen(s), sub, strlen(sub)); \ 10570af302Sopenharmony_ci if (q) \ 11570af302Sopenharmony_ci t_error("memmem("#s" "#tail", %d, "#sub", %d) returned str+%d, wanted 0\n",\ 12570af302Sopenharmony_ci strlen(s), strlen(sub), q-p); \ 13570af302Sopenharmony_ci} 14570af302Sopenharmony_ci 15570af302Sopenharmony_ci#define T(s, sub, n) { \ 16570af302Sopenharmony_ci char *p = s; \ 17570af302Sopenharmony_ci char *q = memmem(p, strlen(p), sub, strlen(sub)); \ 18570af302Sopenharmony_ci if (q == 0) \ 19570af302Sopenharmony_ci t_error("memmem(%s,%s) returned 0, wanted str+%d\n", #s, #sub, n); \ 20570af302Sopenharmony_ci else if (q - p != n) \ 21570af302Sopenharmony_ci t_error("memmem(%s,%s) returned str+%d, wanted str+%d\n", #s, #sub, q-p, n); \ 22570af302Sopenharmony_ci} 23570af302Sopenharmony_ci 24570af302Sopenharmony_ciint main(void) 25570af302Sopenharmony_ci{ 26570af302Sopenharmony_ci N("","a", "a") 27570af302Sopenharmony_ci N("a","a", "aa") 28570af302Sopenharmony_ci N("a","b", "b") 29570af302Sopenharmony_ci N("aa","b", "ab") 30570af302Sopenharmony_ci N("aa","a", "aaa") 31570af302Sopenharmony_ci N("aba","b", "bab") 32570af302Sopenharmony_ci N("abba","b", "bab") 33570af302Sopenharmony_ci N("abba","ba", "aba") 34570af302Sopenharmony_ci N("abc abc","d", "abcd") 35570af302Sopenharmony_ci N("0-1-2-3-4-5-6-7-8-9","", "-3-4-56-7-8-") 36570af302Sopenharmony_ci N("0-1-2-3-4-5-6-7-8-9","", "-3-4-5+6-7-8-") 37570af302Sopenharmony_ci N("_ _ _\xff_ _ _","\x7f_", "_\x7f_") 38570af302Sopenharmony_ci N("_ _ _\x7f_ _ _","\xff_", "_\xff_") 39570af302Sopenharmony_ci 40570af302Sopenharmony_ci T("", "", 0) 41570af302Sopenharmony_ci T("abcd", "", 0) 42570af302Sopenharmony_ci T("abcd", "a", 0) 43570af302Sopenharmony_ci T("abcd", "b", 1) 44570af302Sopenharmony_ci T("abcd", "c", 2) 45570af302Sopenharmony_ci T("abcd", "d", 3) 46570af302Sopenharmony_ci T("abcd", "ab", 0) 47570af302Sopenharmony_ci T("abcd", "bc", 1) 48570af302Sopenharmony_ci T("abcd", "cd", 2) 49570af302Sopenharmony_ci T("ababa", "baba", 1) 50570af302Sopenharmony_ci T("ababab", "babab", 1) 51570af302Sopenharmony_ci T("abababa", "bababa", 1) 52570af302Sopenharmony_ci T("abababab", "bababab", 1) 53570af302Sopenharmony_ci T("ababababa", "babababa", 1) 54570af302Sopenharmony_ci T("abbababab", "bababa", 2) 55570af302Sopenharmony_ci T("abbababab", "ababab", 3) 56570af302Sopenharmony_ci T("abacabcabcab", "abcabcab", 4) 57570af302Sopenharmony_ci T("nanabanabanana", "aba", 3) 58570af302Sopenharmony_ci T("nanabanabanana", "ban", 4) 59570af302Sopenharmony_ci T("nanabanabanana", "anab", 1) 60570af302Sopenharmony_ci T("nanabanabanana", "banana", 8) 61570af302Sopenharmony_ci T("_ _\xff_ _", "_\xff_", 2) 62570af302Sopenharmony_ci 63570af302Sopenharmony_ci return t_status; 64570af302Sopenharmony_ci} 65