Blame src/functional/search_hsearch.c
|
Szabolcs Nagy |
54f9b9 |
#ifndef _XOPEN_SOURCE
|
|
Szabolcs Nagy |
54f9b9 |
#define _XOPEN_SOURCE 700
|
|
Szabolcs Nagy |
54f9b9 |
#endif
|
|
Szabolcs Nagy |
7db624 |
#include <stdint.h>
|
|
Szabolcs Nagy |
132e38 |
#include <stdlib.h>
|
|
Szabolcs Nagy |
132e38 |
#include <string.h>
|
|
Szabolcs Nagy |
132e38 |
#include <search.h>
|
|
Szabolcs Nagy |
132e38 |
#include <errno.h>
|
|
Szabolcs Nagy |
132e38 |
#include "test.h"
|
|
Szabolcs Nagy |
132e38 |
|
|
Szabolcs Nagy |
132e38 |
#define set(k,v) do{ \
|
|
Szabolcs Nagy |
132e38 |
e = hsearch((ENTRY){.key = k, .data = (void*)v}, ENTER); \
|
|
Szabolcs Nagy |
132e38 |
if (!e || strcmp(e->key, k) != 0) \
|
|
Szabolcs Nagy |
132e38 |
t_error("hsearch ENTER %s %d failed\n", k, v); \
|
|
Szabolcs Nagy |
132e38 |
}while(0)
|
|
Szabolcs Nagy |
132e38 |
|
|
Szabolcs Nagy |
132e38 |
#define get(k) hsearch((ENTRY){.key = k, .data = 0}, FIND)
|
|
Szabolcs Nagy |
132e38 |
|
|
Szabolcs Nagy |
7db624 |
#define getdata(e) ((intptr_t)(e)->data)
|
|
Szabolcs Nagy |
7db624 |
|
|
Szabolcs Nagy |
132e38 |
int main()
|
|
Szabolcs Nagy |
132e38 |
{
|
|
Szabolcs Nagy |
132e38 |
ENTRY *e;
|
|
Szabolcs Nagy |
132e38 |
|
|
Szabolcs Nagy |
132e38 |
if (hcreate(-1) || errno != ENOMEM)
|
|
Szabolcs Nagy |
132e38 |
t_error("hcreate((size_t)-1) should fail with ENOMEM got %s\n", strerror(errno));
|
|
Szabolcs Nagy |
132e38 |
if (!hcreate(13))
|
|
Szabolcs Nagy |
132e38 |
t_error("hcreate(13) failed\n");
|
|
Szabolcs Nagy |
132e38 |
set("", 0);
|
|
Szabolcs Nagy |
132e38 |
set("a", 1);
|
|
Szabolcs Nagy |
132e38 |
set("b", 2);
|
|
Szabolcs Nagy |
132e38 |
set("abc", 3);
|
|
Szabolcs Nagy |
132e38 |
set("cd", 4);
|
|
Szabolcs Nagy |
132e38 |
set("e", 5);
|
|
Szabolcs Nagy |
132e38 |
set("ef", 6);
|
|
Szabolcs Nagy |
132e38 |
set("g", 7);
|
|
Szabolcs Nagy |
132e38 |
set("h", 8);
|
|
Szabolcs Nagy |
132e38 |
set("iiiiiiiiii", 9);
|
|
Szabolcs Nagy |
132e38 |
if (!get("a"))
|
|
Szabolcs Nagy |
132e38 |
t_error("hsearch FIND a failed\n");
|
|
Szabolcs Nagy |
132e38 |
if (get("c"))
|
|
Szabolcs Nagy |
132e38 |
t_error("hsearch FIND c should fail\n");
|
|
Szabolcs Nagy |
132e38 |
set("g", 10);
|
|
Szabolcs Nagy |
7db624 |
if (e && getdata(e) != 7)
|
|
Szabolcs Nagy |
7db624 |
t_error("hsearch ENTER g 10 returned data %d, wanted 7\n", getdata(e));
|
|
Szabolcs Nagy |
132e38 |
set("g", 10);
|
|
Szabolcs Nagy |
7db624 |
if (e && getdata(e) != 7)
|
|
Szabolcs Nagy |
7db624 |
t_error("hsearch ENTER g 10 returned data %d, wanted 7\n", getdata(e));
|
|
Szabolcs Nagy |
132e38 |
set("j", 10);
|
|
Szabolcs Nagy |
7db624 |
if (e && getdata(e) != 10)
|
|
Szabolcs Nagy |
7db624 |
t_error("hsearch ENTER j 10 returned data %d, wanted 10\n", getdata(e));
|
|
Szabolcs Nagy |
132e38 |
hdestroy();
|
|
Szabolcs Nagy |
132e38 |
return t_status;
|
|
Szabolcs Nagy |
132e38 |
}
|