#ifndef _XOPEN_SOURCE #define _XOPEN_SOURCE 700 #endif #include #include #include "test.h" #define W 80 static char tab[100][W]; static size_t nel; #define set(k) do{ \ char *r = lsearch(k, tab, &nel, W, (int(*)(const void*,const void*))strcmp); \ if (strcmp(r, k) != 0) \ t_error("lsearch %s failed\n", #k); \ }while(0) #define get(k) lfind(k, tab, &nel, W, (int(*)(const void*,const void*))strcmp) int main() { size_t n; set(""); set("a"); set("b"); set("abc"); set("cd"); set("e"); set("ef"); set("g"); set("h"); set("iiiiiiiiii"); if (!get("a")) t_error("lfind a failed\n"); if (get("c")) t_error("lfind c should fail\n"); n = nel; set("g"); if (nel != n) t_error("lsearch g should not modify the table size (%d, was %d)\n", nel, n); n = nel; set("j"); if (nel != n+1) t_error("lsearch j should increase the table size (%d, was %d)\n", nel, n); return t_status; }