1 #include "derp/common.h"
2 #include "derp/hashmap.h"
8 int ivals[] = {0,1,2,3,4,5,6,7,8,9};
10 unsigned long djb2hash(const void *x)
13 unsigned long hash = 5381;
17 while ( (c = *str++) )
24 hashmap *h = hm_new(0, djb2hash, derp_strcmp, NULL);
26 assert(hm_length(h) == 0);
27 assert(hm_is_empty(h));
29 assert(!hm_iter_next(i));
32 assert(!hm_at(h, "zero"));
33 hm_insert(h, "zero", ivals);
34 assert(hm_length(h) == 1);
35 assert(*(int*)hm_at(h, "zero") == 0);
38 hm_insert(h, "zero", ivals+1);
39 assert(hm_length(h) == 1);
40 assert(*(int*)hm_at(h, "zero") == 1);
42 hm_insert(h, "zero", ivals);
43 assert(*(int*)hm_at(h, "zero") == 0);
45 hm_insert(h, "one", ivals+1);
46 assert(hm_length(h) == 2);
47 assert(*(int*)hm_at(h, "zero") == 0);
48 assert(*(int*)hm_at(h, "one") == 1);
49 assert(!hm_at(h, "flurgle"));
53 for (i = hm_iter_begin(h); (p = hm_iter_next(i)); n_keys++)
54 assert(strcmp((char*)p->k, "zero") == 0 ||
55 strcmp((char*)p->k, "one") == 0);
60 assert(!hm_at(h, "one"));
63 assert(hm_length(h) == 0);
64 assert(!hm_at(h, "zero"));
66 /* test for memory leak */
67 hm_dtor(h, derp_free, derp_free, NULL);
68 char *key = malloc(5);
69 int *val1 = malloc(sizeof *val1),
70 *val2 = malloc(sizeof *val2);
74 hm_insert(h, key, val1);
75 hm_insert(h, key, val2);
79 /* test iterator when hashmap has only one bucket */
80 hashmap *h1 = hm_new(1, djb2hash, derp_strcmp, NULL);
81 assert(hm_is_empty(h1));
82 hm_insert(h1, "zero", ivals);
83 hm_insert(h1, "one", ivals+1);
84 assert(hm_length(h1) == 2);
85 for (n_keys = 0, i = hm_iter_begin(h1); (p = hm_iter_next(i)); n_keys++)