#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE 700
#endif
#include <string.h>
#include <search.h>
#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;
}