1
#include <CUnit/CUnit.h>
7
void test_list_new(void)
9
struct list *l = list_new();
11
CU_ASSERT_PTR_NOT_NULL_FATAL(l);
12
CU_ASSERT_PTR_NULL(l->first);
13
CU_ASSERT_PTR_NULL(l->last);
18
void test_list_copy(void)
20
struct list *l = list_new();
23
list_append(l, (void *)1);
24
list_append(l, (void *)2);
25
list_append(l, (void *)3);
29
CU_ASSERT_EQUAL(list_length(l), list_length(m));
30
CU_ASSERT_PTR_NOT_EQUAL(l, m);
32
for (struct list_item *item_l = l->first, *item_m = m->first;
33
item_l != NULL && item_m != NULL;
34
item_l = item_l->next, item_m = item_m->next) {
35
CU_ASSERT_PTR_EQUAL(item_l->data, item_m->data);
36
CU_ASSERT_PTR_NOT_EQUAL(item_l, item_m);
43
void test_list_free(void)
45
struct list *l = list_new();
47
list_append(l, (void *)1);
48
list_append(l, (void *)2);
49
list_append(l, (void *)3);
53
CU_PASS("list_free() didn't crash");
56
void test_list_length(void)
58
struct list *l = list_new();
60
CU_ASSERT(list_length(l) == 0);
62
list_append(l, (void *)1);
63
CU_ASSERT(list_length(l) == 1);
65
list_append(l, (void *)2);
66
CU_ASSERT(list_length(l) == 2);
68
list_append(l, (void *)3);
69
CU_ASSERT(list_length(l) == 3);
71
list_append(l, (void *)4);
72
CU_ASSERT(list_length(l) == 4);
77
void test_list_append(void)
79
struct list *l = list_new();
81
list_append(l, (void *)1);
83
CU_ASSERT_PTR_EQUAL(l->first, l->last);
84
CU_ASSERT_PTR_NULL(l->first->previous);
85
CU_ASSERT_PTR_NULL(l->last->next);
87
CU_ASSERT_PTR_EQUAL(l->first->data, (void *)1);
89
list_append(l, (void *)2);
91
CU_ASSERT_PTR_NOT_EQUAL(l->first, l->last);
92
CU_ASSERT_PTR_EQUAL(l->first->next, l->last);
93
CU_ASSERT_PTR_EQUAL(l->last->previous, l->first);
94
CU_ASSERT_PTR_NULL(l->first->previous);
95
CU_ASSERT_PTR_NULL(l->last->next);
97
CU_ASSERT_PTR_EQUAL(l->last->data, (void *)2);
99
list_append(l, (void *)3);
101
CU_ASSERT_PTR_EQUAL(l->first->next, l->last->previous);
102
CU_ASSERT_PTR_EQUAL(l->last->previous->previous, l->first);
103
CU_ASSERT_PTR_NULL(l->first->previous);
104
CU_ASSERT_PTR_NULL(l->last->next);
106
CU_ASSERT_PTR_EQUAL(l->last->data, (void *)3);
111
void test_list_delete_item(void)
113
struct list *l = list_new();
115
list_append(l, (void *)1);
117
list_delete_item(l, l->first);
119
CU_ASSERT_PTR_NULL(l->first);
120
CU_ASSERT_PTR_NULL(l->last);
122
list_append(l, (void *)1);
123
list_append(l, (void *)2);
124
list_append(l, (void *)3);
126
list_delete_item(l, l->first->next);
128
CU_ASSERT_PTR_EQUAL(l->first->next, l->last);
129
CU_ASSERT_PTR_EQUAL(l->last->previous, l->first);
131
CU_ASSERT_PTR_EQUAL(l->first->data, (void *)1)
132
CU_ASSERT_PTR_EQUAL(l->last->data, (void *)3)
137
void test_list_delete(void)
139
struct list *l = list_new();
141
list_append(l, (void *)1);
142
list_append(l, (void *)2);
143
list_append(l, (void *)3);
145
list_delete(l, (void *)2);
147
CU_ASSERT_PTR_EQUAL(l->first->next, l->last);
148
CU_ASSERT_PTR_EQUAL(l->last->previous, l->first);
150
CU_ASSERT_PTR_EQUAL(l->first->data, (void *)1)
151
CU_ASSERT_PTR_EQUAL(l->last->data, (void *)3)
153
list_delete(l, (void *)1);
154
list_delete(l, (void *)3);
156
CU_ASSERT(list_length(l) == 0);
158
list_delete(l, (void *)4);
163
void test_list_find(void)
165
struct list *l = list_new();
167
list_append(l, (void *)1);
168
list_append(l, (void *)2);
169
list_append(l, (void *)3);
171
CU_ASSERT_PTR_EQUAL(list_find(l, (void *)2), l->first->next);
172
CU_ASSERT_PTR_NULL(list_find(l, (void *)4));
173
CU_ASSERT_PTR_NULL(list_find(l, NULL));
178
CU_TestInfo list_tests[] = {
179
{ "test_list_new", test_list_new },
180
{ "test_list_copy", test_list_copy },
181
{ "test_list_free", test_list_free },
182
{ "test_list_length", test_list_length },
183
{ "test_list_append", test_list_append },
184
{ "test_list_delete_item", test_list_delete_item },
185
{ "test_list_delete", test_list_delete },
186
{ "test_list_find", test_list_find },