]> begriffs open source - libderp/blob - test/t_list.c
WIP: pass auxiliary arg to comparator
[libderp] / test / t_list.c
1 #include "list.h"
2 #include <assert.h>
3 #include <stdlib.h>
4 #include <stdio.h>
5
6 #define ARRAY_LEN(a) (sizeof(a)/sizeof(*a))
7
8 int cmpint(const void *a, const void *b, void *aux)
9 {
10         (void)aux;
11         return *(int*)a - *(int*)b;
12 }
13
14 int ivals[] = {0,1,2,3,4,5,6,7,8,9};
15
16 int main(void)
17 {
18         list *l = l_new(NULL);
19
20         assert(l_length(l) == 0);
21         assert(l_is_empty(l));
22         l_prepend(l, &ivals[0]);
23         assert(l_length(l) == 1);
24         assert(!l_is_empty(l));
25         l_remove_first(l);
26         l_remove_first(l); /* redundant */
27         assert(l_is_empty(l));
28         l_append(l, &ivals[0]);
29         assert(l_length(l) == 1);
30         l_remove_first(l);
31         l_remove_first(l); /* redundant */
32         assert(l_is_empty(l));
33
34         size_t i;
35         for (i = 0; i < 3; i++)
36                 l_append(l, ivals+i);
37         l_remove(l, l_first(l)->next);
38         assert(*(int*)l_first(l)->data == 0);
39         assert(*(int*)l_first(l)->next->data == 2);
40
41         assert(*(int*)l_last(l)->data == 2);
42         assert(*(int*)l_last(l)->prev->data == 0);
43
44         l_insert(l, l_first(l)->next, ivals+8);
45         assert(*(int*)l_first(l)->data == 0);
46         assert(*(int*)l_first(l)->next->data == 8);
47         assert(*(int*)l_first(l)->next->next->data == 2);
48         assert(l_length(l) == 3);
49
50         l_insert_after(l, l_first(l), ivals+7);
51         assert(*(int*)l_first(l)->data == 0);
52         assert(*(int*)l_first(l)->next->data == 7);
53         assert(*(int*)l_first(l)->next->next->data == 8);
54         assert(*(int*)l_first(l)->next->next->next->data == 2);
55
56         l_sort(l, cmpint, NULL);
57         assert(*(int*)l_first(l)->data == 0);
58         assert(*(int*)l_first(l)->next->data == 2);
59         assert(*(int*)l_first(l)->next->next->data == 7);
60         assert(*(int*)l_first(l)->next->next->next->data == 8);
61
62         l_insert_after(l, l_first(l)->next, ivals+9);
63         l_sort(l, cmpint, NULL);
64         assert(*(int*)l_first(l)->data == 0);
65         assert(*(int*)l_first(l)->next->data == 2);
66         assert(*(int*)l_first(l)->next->next->data == 7);
67         assert(*(int*)l_first(l)->next->next->next->data == 8);
68         assert(*(int*)l_first(l)->next->next->next->next->data == 9);
69
70         l_insert_after(l, l_first(l), ivals+4);
71         l_insert(l, l_last(l), ivals+4);
72         assert(l_find(l, ivals+4, cmpint, NULL) == l_first(l)->next);
73         assert(l_find_last(l, ivals+4, cmpint, NULL) == l_last(l)->prev);
74
75         l_clear(l);
76
77         for (i = 0; i < ARRAY_LEN(ivals); i++)
78                 l_append(l, ivals+i);
79         assert(l_length(l) == ARRAY_LEN(ivals));
80         assert(*(int*)l_last(l)->data == 9);
81         assert(*(int*)l_remove_last(l)->data == 9);
82         assert(*(int*)l_remove_last(l)->data == 8);
83
84         l_free(l);
85
86         return 0;
87 }