7 #include "derp/common.h"
8 #include "derp/hashmap.h"
10 int ivals[] = {0,1,2,3,4,5,6,7,8,9};
12 unsigned long djb2hash(const void *x)
15 unsigned long hash = 5381;
19 while ( (c = *str++) )
28 hashmap *h = hm_new(0, djb2hash, derp_strcmp, NULL);
30 assert(hm_length(h) == 0);
31 assert(hm_is_empty(h));
33 assert(!hm_iter_next(i));
36 assert(!hm_at(h, "zero"));
37 hm_insert(h, "zero", ivals);
38 assert(hm_length(h) == 1);
39 assert(*(int*)hm_at(h, "zero") == 0);
42 hm_insert(h, "zero", ivals+1);
43 assert(hm_length(h) == 1);
44 assert(*(int*)hm_at(h, "zero") == 1);
46 hm_insert(h, "zero", ivals);
47 assert(*(int*)hm_at(h, "zero") == 0);
49 hm_insert(h, "one", ivals+1);
50 assert(hm_length(h) == 2);
51 assert(*(int*)hm_at(h, "zero") == 0);
52 assert(*(int*)hm_at(h, "one") == 1);
53 assert(!hm_at(h, "flurgle"));
57 for (i = hm_iter_begin(h); (p = hm_iter_next(i)); n_keys++)
58 assert(strcmp((char*)p->k, "zero") == 0 ||
59 strcmp((char*)p->k, "one") == 0);
64 assert(!hm_at(h, "one"));
67 assert(hm_length(h) == 0);
68 assert(!hm_at(h, "zero"));
70 /* test for memory leak */
71 hm_dtor(h, derp_free, derp_free, NULL);
72 char *key = GC_MALLOC(5);
73 int *val1 = GC_MALLOC(sizeof *val1),
74 *val2 = GC_MALLOC(sizeof *val2);
78 hm_insert(h, key, val1);
79 hm_insert(h, key, val2);
83 /* test iterator when hashmap has only one bucket */
84 hashmap *h1 = hm_new(1, djb2hash, derp_strcmp, NULL);
85 assert(hm_is_empty(h1));
86 hm_insert(h1, "zero", ivals);
87 hm_insert(h1, "one", ivals+1);
88 assert(hm_length(h1) == 2);
89 for (n_keys = 0, i = hm_iter_begin(h1); (p = hm_iter_next(i)); n_keys++)