Wed, 27 Feb 2013 10:28:02 +0100
added tests for ucx_(d)list_contains
1 /*
2 * tests of dlist implementation
3 */
5 #include "dlist_tests.h"
6 #include "ucx/comparator.h"
8 UCX_TEST_IMPLEMENT(test_ucx_dlist_append) {
9 UcxDlist *list = ucx_dlist_append(NULL, (void*)"Hello");
10 UCX_TEST_BEGIN
12 UCX_TEST_ASSERT(strncmp((const char*)list->data, "Hello", 5) == 0,
13 "failed");
15 list = ucx_dlist_append(list, (void*)" World!");
17 UCX_TEST_ASSERT(strncmp((const char*)list->next->data, " World!", 7) == 0,
18 "failed");
19 UCX_TEST_ASSERT(list->next->next == NULL, "failed");
20 UCX_TEST_END
22 ucx_dlist_free(list);
23 }
25 UCX_TEST_IMPLEMENT(test_ucx_dlist_prepend) {
26 UcxDlist *list = ucx_dlist_prepend(NULL, (void*)" World!");
27 UCX_TEST_BEGIN
29 list = ucx_dlist_prepend(list, (void*)"Hello");
31 UCX_TEST_ASSERT(strncmp((const char*)list->data, "Hello", 5) == 0,
32 "failed");
33 UCX_TEST_ASSERT(strncmp((const char*)list->next->data, " World!", 7) == 0,
34 "failed");
35 UCX_TEST_ASSERT(list->next->next == NULL, "failed");
37 UCX_TEST_END
38 ucx_dlist_free(list);
39 }
41 UCX_TEST_IMPLEMENT(test_ucx_dlist_equals) {
42 UcxDlist *list = ucx_dlist_append(NULL, (void*)"Hello");
43 list = ucx_dlist_append(list, (void*)" World!");
44 UcxDlist *list2 = ucx_dlist_prepend(NULL, (void*)" World!");
45 list2 = ucx_dlist_prepend(list2, (void*)"Hello");
46 UcxDlist *list3 = ucx_dlist_prepend(NULL, (void*)" Welt!");
47 list3 = ucx_dlist_prepend(list3, (void*)"Hallo");
48 UCX_TEST_BEGIN
50 UCX_TEST_ASSERT(ucx_dlist_equals(list, list2, ucx_strcmp, NULL), "failed");
51 UCX_TEST_ASSERT(!ucx_dlist_equals(list, list3, ucx_strcmp, NULL), "failed");
53 UCX_TEST_END
54 ucx_dlist_free(list3);
55 ucx_dlist_free(list2);
56 ucx_dlist_free(list);
57 }
59 UCX_TEST_IMPLEMENT(test_ucx_dlist_concat) {
60 UcxDlist *list = ucx_dlist_append(NULL, (void*)"Hello");
61 UcxDlist *list2 = ucx_dlist_prepend(NULL, (void*)" World!");
62 UCX_TEST_BEGIN
64 list = ucx_dlist_concat(list, list2);
66 UCX_TEST_ASSERT(strncmp((const char*)list->data, "Hello", 5) == 0,
67 "failed");
68 UCX_TEST_ASSERT(strncmp((const char*)list->next->data, " World!", 7) == 0,
69 "failed");
70 UCX_TEST_ASSERT(list->next->next == NULL, "failed");
72 UCX_TEST_END
73 ucx_dlist_free(list);
74 }
76 UCX_TEST_IMPLEMENT(test_ucx_dlist_size) {
77 UcxDlist *list = ucx_dlist_append(NULL, (void*)"This ");
78 UCX_TEST_BEGIN
79 list = ucx_dlist_append(list, (void*)"list ");
80 list = ucx_dlist_append(list, (void*)"has ");
81 list = ucx_dlist_append(list, (void*)"size ");
82 list = ucx_dlist_append(list, (void*)"5!");
84 UCX_TEST_ASSERT(ucx_dlist_size(list) == 5, "failed");
86 UCX_TEST_END
87 ucx_dlist_free(list);
88 }
90 UCX_TEST_IMPLEMENT(test_ucx_dlist_first) {
91 UcxDlist *list = ucx_dlist_append(NULL, (void*)"Find ");
92 UCX_TEST_BEGIN
93 list = ucx_dlist_append(list, (void*)"the ");
94 list = ucx_dlist_append(list, (void*)"first!");
96 const char* first = (const char*) (ucx_dlist_first(list)->data);
98 UCX_TEST_ASSERT(strncmp(first, "Find ", 5) == 0, "failed");
100 UCX_TEST_END
101 ucx_dlist_free(list);
102 }
104 UCX_TEST_IMPLEMENT(test_ucx_dlist_last) {
105 UcxDlist *list = ucx_dlist_append(NULL, (void*)"Find ");
106 UCX_TEST_BEGIN
107 list = ucx_dlist_append(list, (void*)"the ");
108 list = ucx_dlist_append(list, (void*)"last!");
110 const char* last = (const char*) (ucx_dlist_last(list)->data);
112 UCX_TEST_ASSERT(strncmp(last, "last!", 5) == 0, "failed");
114 UCX_TEST_END
115 ucx_dlist_free(list);
116 }
118 UCX_TEST_IMPLEMENT(test_ucx_dlist_get) {
119 UcxDlist *list = ucx_dlist_append(NULL, (void*)"Find ");
120 UCX_TEST_BEGIN
121 list = ucx_dlist_append(list, (void*)"the ");
122 list = ucx_dlist_append(list, (void*)"mid!");
124 const char* mid = (const char*) (ucx_dlist_get(list, 1)->data);
126 UCX_TEST_ASSERT(strncmp(mid, "the ", 4) == 0, "failed");
128 UCX_TEST_END
129 ucx_dlist_free(list);
130 }
132 UCX_TEST_IMPLEMENT(test_ucx_dlist_contains) {
133 UcxDlist *l = ucx_dlist_append(NULL, (void*)"Contains ");
134 UCX_TEST_BEGIN
135 l = ucx_dlist_append(l, (void*)"a ");
136 l = ucx_dlist_append(l, (void*)"string!");
138 UCX_TEST_ASSERT(ucx_dlist_contains(l,(void*)"a ",ucx_strcmp,NULL),"failed");
139 UCX_TEST_ASSERT(!ucx_dlist_contains(l,(void*)"a",ucx_strcmp,NULL),"failed");
141 UCX_TEST_END
142 ucx_dlist_free(l);
143 }
145 UCX_TEST_IMPLEMENT(test_ucx_dlist_remove) {
146 UcxDlist *list = ucx_dlist_append(NULL, (void*)"Hello");
147 UCX_TEST_BEGIN
148 list = ucx_dlist_append(list, (void*)" fucking");
149 list = ucx_dlist_append(list, (void*)" World!");
151 list = ucx_dlist_remove(list, ucx_dlist_get(list, 1));
153 UCX_TEST_ASSERT(strncmp((const char*)list->data, "Hello", 5) == 0,
154 "failed");
155 UCX_TEST_ASSERT(strncmp((const char*)list->next->data, " World!", 7) == 0,
156 "failed");
157 UCX_TEST_ASSERT(list->next->next == NULL, "failed");
159 UCX_TEST_END
160 ucx_dlist_free(list);
161 }
163 UCX_TEST_IMPLEMENT(test_ucx_dlist_clone) {
165 char *hello = (char*)malloc(6);
166 char *world = (char*)malloc(8);
168 memcpy(hello, "Hello", 6);
169 memcpy(world, " World!", 8);
171 UcxDlist *list = ucx_dlist_append(NULL, hello);
172 list = ucx_dlist_append(list, world);
174 UcxDlist *copy = ucx_dlist_clone(list, copy_string, NULL);
175 UCX_TEST_BEGIN
177 UCX_TEST_ASSERT(ucx_dlist_equals(list, copy, ucx_strcmp, NULL), "failed");
178 UCX_TEST_ASSERT(hello != copy->data, "first element is no copy");
179 UCX_TEST_ASSERT(world != copy->next->data, "second element is no copy");
181 UCX_TEST_END
182 free(copy->next->data);
183 free(copy->data);
185 free(world);
186 free(hello);
187 ucx_dlist_free(list);
188 ucx_dlist_free(copy);
189 }
191 UCX_TEST_IMPLEMENT(test_ucx_dlist_sort) {
192 UcxDlist *list = ucx_dlist_append(NULL, (void*)"this");
193 list = ucx_dlist_append(list, (void*)"is");
194 list = ucx_dlist_append(list, (void*)"a");
195 list = ucx_dlist_append(list, (void*)"test");
196 list = ucx_dlist_append(list, (void*)"for");
197 list = ucx_dlist_append(list, (void*)"partial");
198 list = ucx_dlist_append(list, (void*)"correctness");
200 UcxDlist *expected = ucx_dlist_append(NULL, (void*)"a");
201 expected = ucx_dlist_append(expected, (void*)"correctness");
202 expected = ucx_dlist_append(expected, (void*)"for");
203 expected = ucx_dlist_append(expected, (void*)"is");
204 expected = ucx_dlist_append(expected, (void*)"partial");
205 expected = ucx_dlist_append(expected, (void*)"test");
206 expected = ucx_dlist_append(expected, (void*)"this");
208 list = ucx_dlist_sort(list, ucx_strcmp, NULL);
210 UCX_TEST_BEGIN
211 UCX_TEST_ASSERT(
212 ucx_dlist_equals(list, expected, ucx_strcmp, NULL), "failed");
213 UcxDlist *l = list;
214 UCX_TEST_ASSERT(l->prev == NULL, "prev field of first entry is not null");
215 while (l->next != NULL) {
216 UCX_TEST_ASSERT(l->next->prev == l, "prev pointer corrupted");
217 l = l->next;
218 }
219 UCX_TEST_END
221 ucx_dlist_free(expected);
222 ucx_dlist_free(list);
223 }