]> begriffs open source - libderp/blob - test/t_hashmap.c
Adequate list test coverage
[libderp] / test / t_hashmap.c
1 #include "hashmap.h"
2
3 #include <assert.h>
4 #include <stdlib.h>
5 #include <string.h>
6
7 int ivals[] = {0,1,2,3,4,5,6,7,8,9};
8
9 unsigned long djb2hash(const void *x)
10 {
11         const char *str = x;
12         unsigned long hash = 5381;
13         int c;
14
15         if (str)
16                 while ( (c = *str++) )
17                         hash = hash * 33 + c;
18         return hash;
19 }
20
21 int scmp(const void *a, const void *b, void *aux)
22 {
23         (void)aux;
24         return strcmp(a, b);
25 }
26
27 void myfree(void *a, void *aux)
28 {
29         (void)aux;
30         free(a);
31 }
32
33 int main(void)
34 {
35         hashmap *h = hm_new(0, djb2hash, scmp, NULL);
36         assert(hm_length(h) == 0);
37         assert(hm_is_empty(h));
38
39         assert(!hm_at(h, "zero"));
40         hm_insert(h, "zero", ivals);
41         assert(hm_length(h) == 1);
42         assert(*(int*)hm_at(h, "zero") == 0);
43
44         hm_insert(h, "one", ivals+1);
45         assert(hm_length(h) == 2);
46         assert(*(int*)hm_at(h, "zero") == 0);
47         assert(*(int*)hm_at(h, "one") == 1);
48         assert(!hm_at(h, "flurgle"));
49
50         hm_remove(h, "one");
51         assert(!hm_at(h, "one"));
52
53         hm_clear(h);
54         assert(hm_length(h) == 0);
55         assert(!hm_at(h, "zero"));
56
57         /* test for memory leak */
58         hm_dtor(h, NULL, myfree, NULL);
59         int *life = malloc(sizeof *life);
60         *life = 42;
61         hm_insert(h, "life", life);
62
63         hm_free(h);
64
65         return 0;
66 }