Blame src/functional/search_lsearch.c

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