]> begriffs open source - libderp/blob - test/t_treemap.c
Fix memory leak
[libderp] / test / t_treemap.c
1 #include "treemap.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 int scmp(const void *a, const void *b, void *aux)
10 {
11         (void)aux;
12         return strcmp(a, b);
13 }
14
15 void myfree(void *a, void *aux)
16 {
17         (void)aux;
18         free(a);
19 }
20
21 int main(void)
22 {
23         treemap *t = tm_new(scmp, NULL);
24         assert(tm_length(t) == 0);
25         assert(tm_is_empty(t));
26
27         assert(!tm_at(t, "zero"));
28         tm_insert(t, "zero", ivals);
29         assert(tm_length(t) == 1);
30         assert(*(int*)tm_at(t, "zero") == 0);
31
32         /* change it */
33         tm_insert(t, "zero", ivals+1);
34         assert(tm_length(t) == 1);
35         assert(*(int*)tm_at(t, "zero") == 1);
36         /* set it back */
37         tm_insert(t, "zero", ivals);
38         assert(*(int*)tm_at(t, "zero") == 0);
39
40         tm_insert(t, "one", ivals+1);
41         assert(tm_length(t) == 2);
42         assert(*(int*)tm_at(t, "zero") == 0);
43         assert(*(int*)tm_at(t, "one") == 1);
44         assert(!tm_at(t, "flurgle"));
45
46         tm_remove(t, "one");
47         assert(!tm_at(t, "one"));
48
49         tm_clear(t);
50         assert(tm_length(t) == 0);
51         assert(!tm_at(t, "zero"));
52
53         /* test for memory leak */
54         tm_dtor(t, myfree, myfree, NULL);
55         char *key = malloc(5);
56         int  *val1 = malloc(sizeof *val1),
57              *val2 = malloc(sizeof *val2);
58         strcpy(key, "life");
59         *val1 = 42;
60         *val2 = 13;
61         tm_insert(t, key, val1);
62         tm_insert(t, key, val2);
63
64         tm_free(t);
65
66         return 0;
67 }