aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/eina/src/tests/eina_test_list.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/eina/src/tests/eina_test_list.c')
-rw-r--r--libraries/eina/src/tests/eina_test_list.c347
1 files changed, 347 insertions, 0 deletions
diff --git a/libraries/eina/src/tests/eina_test_list.c b/libraries/eina/src/tests/eina_test_list.c
new file mode 100644
index 0000000..6e08847
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_list.c
@@ -0,0 +1,347 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24
25#include "eina_suite.h"
26#include "Eina.h"
27
28static Eina_Bool eina_list_sorted_check(const Eina_List *list)
29{
30 const Eina_List *n;
31 void *d;
32 int last = *(int *)list->data;
33
34 EINA_LIST_FOREACH(list->next, n, d)
35 {
36 int current = *(int *)d;
37 if (last > current)
38 {
39 fprintf(stderr, "list is not sorted: last=%d, current=%d\n",
40 last, current);
41 return 0;
42 }
43
44 last = current;
45 }
46
47 return 1;
48}
49
50static int eina_int_cmp(const void *a, const void *b)
51{
52 const int *ia = a;
53 const int *ib = b;
54
55 return *ia - *ib;
56}
57
58START_TEST(eina_test_simple)
59{
60 Eina_List *list = NULL;
61 Eina_List *tmp;
62 int *test1;
63 int *test2;
64 int *test3;
65 int data[] = { 6, 9, 42, 1, 7, 9, 81, 1664, 1337 };
66 int result[] = { 81, 9, 9, 7, 1 };
67 int i;
68
69 eina_init();
70
71 list = eina_list_append(list, &data[0]);
72 fail_if(list == NULL);
73
74 list = eina_list_prepend(list, &data[1]);
75 fail_if(list == NULL);
76
77 list = eina_list_append(list, &data[2]);
78 fail_if(list == NULL);
79
80 list = eina_list_remove(list, &data[0]);
81 fail_if(list == NULL);
82
83 list = eina_list_remove(list, &data[0]);
84 fail_if(list == NULL);
85
86 tmp = eina_list_data_find_list(list, &data[2]);
87 fail_if(tmp == NULL);
88
89 list = eina_list_append_relative_list(list, &data[3], tmp);
90 fail_if(list == NULL);
91
92 list = eina_list_prepend_relative_list(list, &data[4], tmp);
93 fail_if(list == NULL);
94
95 list = eina_list_promote_list(list, tmp);
96 fail_if(list == NULL);
97
98 list = eina_list_append_relative(list, &data[5], &data[2]);
99 fail_if(list == NULL);
100
101 list = eina_list_prepend_relative(list, &data[6], &data[2]);
102 fail_if(list == NULL);
103
104 list = eina_list_remove_list(list, tmp);
105 fail_if(list == NULL);
106
107 fail_if(eina_list_data_find_list(list, &data[2]) != NULL);
108 fail_if(eina_list_data_find(list, &data[2]) != NULL);
109 fail_if(eina_list_data_find(list, &data[5]) != &data[5]);
110
111 fail_if(eina_list_count(list) != 5);
112 fail_if(eina_list_nth(list, 4) != &data[3]);
113 fail_if(eina_list_nth(list, 10) != NULL);
114 fail_if(eina_list_nth_list(list, 10) != NULL);
115
116 for (tmp = list, i = 0; tmp != NULL; tmp = eina_list_next(tmp), ++i)
117 {
118 int *d = eina_list_data_get(tmp);
119 fail_if(d == NULL);
120 fail_if(*d != result[i]);
121 }
122
123 list = eina_list_reverse(list);
124
125 for (tmp = list; tmp != NULL; tmp = eina_list_next(tmp), --i)
126 {
127 int *d = eina_list_data_get(tmp);
128 fail_if(d == NULL);
129 fail_if(*d != result[i - 1]);
130 }
131
132 list = eina_list_append_relative(list, &data[7], &data[7]);
133 fail_if(list == NULL);
134
135 list = eina_list_prepend_relative(list, &data[8], &data[8]);
136 fail_if(list == NULL);
137
138 list = eina_list_sort(list, 2, eina_int_cmp);
139
140 list = eina_list_sort(list, 2, eina_int_cmp);
141
142 test1 = eina_list_nth(list, 0);
143 test2 = eina_list_nth(list, 1);
144 test3 = eina_list_nth(list, 2);
145
146 fail_if(test1 == NULL || test2 == NULL || test3 == NULL);
147 fail_if(*test1 > *test2);
148 fail_if(*test3 == *test2);
149
150 list = eina_list_sort(list, 5, eina_int_cmp);
151
152 test1 = eina_list_nth(list, 3);
153 test2 = eina_list_nth(list, 4);
154 test3 = eina_list_nth(list, 5);
155
156 fail_if(test1 == NULL || test2 == NULL || test3 == NULL);
157 fail_if(*test1 > *test2);
158 fail_if(*test3 > *test2);
159
160 list = eina_list_append(list, &data[8]);
161 fail_if(list == NULL);
162
163 list = eina_list_append(list, &data[7]);
164 fail_if(list == NULL);
165
166 list = eina_list_sort(list, -1, eina_int_cmp);
167
168 test1 = eina_list_nth(list, 0);
169 for (tmp = list; tmp != NULL; tmp = eina_list_next(tmp))
170 {
171 int *d = eina_list_data_get(tmp);
172 fail_if(*test1 > *d);
173
174 test1 = d;
175 }
176
177 test3 = eina_list_nth(list, 5);
178 fail_if(test3 == NULL);
179
180 list = eina_list_promote_list(list, list);
181 fail_if(list == NULL);
182
183 list = eina_list_promote_list(list, eina_list_last(list));
184 fail_if(list == NULL);
185
186 test1 = eina_list_nth(list, 0);
187 test2 = eina_list_nth(list, 1);
188
189 list = eina_list_promote_list(eina_list_next(list), list);
190 fail_if(list == NULL);
191 fail_if(eina_list_data_get(list) != test1);
192 fail_if(eina_list_data_get(eina_list_next(list)) != test2);
193
194 list = eina_list_remove_list(list, list);
195 fail_if(list == NULL);
196
197 list = eina_list_remove_list(list, eina_list_last(list));
198 fail_if(list == NULL);
199
200 list = eina_list_free(list);
201 fail_if(list != NULL);
202
203 eina_shutdown();
204}
205END_TEST
206
207START_TEST(eina_test_merge)
208{
209 Eina_List *l1;
210 Eina_List *l2;
211 Eina_List *l3;
212 Eina_List *l4;
213 Eina_List *l5;
214 int data[] = { 6, 9, 42, 1, 7, 9, 81, 1664, 1337, 3, 21, 10, 0, 5, 2008 };
215 int i;
216
217 eina_init();
218
219 l1 = eina_list_append(NULL, &data[0]);
220 l1 = eina_list_append(l1, &data[1]);
221 l1 = eina_list_append(l1, &data[2]);
222 l1 = eina_list_append(l1, &data[3]);
223 fail_if(l1 == NULL);
224
225 l2 = eina_list_append(NULL, &data[4]);
226 l2 = eina_list_append(l2, &data[5]);
227 fail_if(l2 == NULL);
228
229 l1 = eina_list_merge(l1, l2);
230 fail_if(l1 == NULL);
231 fail_if(eina_list_count(l1) != 6);
232 for (i = 0, l2 = l1; ((l2 != NULL) && (i < 6)); ++i, l2 = l2->next)
233 fail_if(l2->data != &data[i]);
234 fail_if(i != 6);
235 fail_if(l2 != NULL);
236
237 eina_list_free(l1);
238
239 l1 = eina_list_append(NULL, &data[0]);
240 l1 = eina_list_append(l1, &data[1]);
241 fail_if(l1 == NULL);
242
243 l2 = eina_list_append(NULL, &data[2]);
244 l2 = eina_list_append(l2, &data[3]);
245 l2 = eina_list_append(l2, &data[4]);
246 l2 = eina_list_append(l2, &data[5]);
247 fail_if(l2 == NULL);
248
249 l1 = eina_list_merge(l1, l2);
250 fail_if(l1 == NULL);
251 fail_if(eina_list_count(l1) != 6);
252 for (i = 0, l2 = l1; ((l2 != NULL) && (i < 6)); ++i, l2 = l2->next)
253 fail_if(l2->data != &data[i]);
254 fail_if(i != 6);
255 fail_if(l2 != NULL);
256
257 l3 = eina_list_append(NULL, &data[6]);
258 l3 = eina_list_append(l3, &data[7]);
259 l3 = eina_list_append(l3, &data[8]);
260
261 l4 = eina_list_append(NULL, &data[9]);
262 l4 = eina_list_append(l4, &data[10]);
263 l4 = eina_list_append(l4, &data[11]);
264
265 l5 = eina_list_append(NULL, &data[12]);
266 l5 = eina_list_append(l5, &data[13]);
267 l5 = eina_list_append(l5, &data[14]);
268
269 l1 = eina_list_sort(l1, -1, eina_int_cmp);
270 l3 = eina_list_sort(l3, -1, eina_int_cmp);
271 l4 = eina_list_sort(l4, -1, eina_int_cmp);
272 l5 = eina_list_sort(l5, -1, eina_int_cmp);
273
274 l1 = eina_list_sorted_merge(l1, l3, eina_int_cmp);
275 fail_if(l1 == NULL);
276 fail_if(eina_list_count(l1) != 9);
277
278 l1 = eina_list_sorted_merge(l1, l4, eina_int_cmp);
279 fail_if(l1 == NULL);
280 fail_if(eina_list_count(l1) != 12);
281
282 l1 = eina_list_sorted_merge(l1, l5, eina_int_cmp);
283 fail_if(l1 == NULL);
284 fail_if(eina_list_count(l1) != 15);
285
286 fail_if(!eina_list_sorted_check(l1));
287
288 eina_shutdown();
289}
290END_TEST
291
292START_TEST(eina_test_sorted_insert)
293{
294 const int data[] = {6, 9, 42, 1, 7, 9, 81, 1664, 1337, 3, 21, 10, 0, 5, 2008};
295 const int data2[] = {5, 0, 3, 2, 1, 0, 1, 2, 3, 4, 5};
296 int i, count;
297 Eina_List *l1, *l2, *itr;
298 void *d;
299
300 eina_init();
301
302 count = sizeof(data) / sizeof(data[0]);
303
304 l1 = NULL;
305 for (i = 0; i < count; i++)
306 l1 = eina_list_sorted_insert(l1, eina_int_cmp, data + i);
307
308 fail_if(l1 == NULL);
309 fail_if(!eina_list_sorted_check(l1));
310
311 l2 = NULL;
312 EINA_LIST_FOREACH(l1, itr, d)
313 l2 = eina_list_sorted_insert(l2, eina_int_cmp, d);
314
315 fail_if(l2 == NULL);
316 fail_if(!eina_list_sorted_check(l2));
317 eina_list_free(l2);
318
319 l2 = NULL;
320 EINA_LIST_REVERSE_FOREACH(l1, itr, d)
321 l2 = eina_list_sorted_insert(l2, eina_int_cmp, d);
322
323 fail_if(l2 == NULL);
324 fail_if(!eina_list_sorted_check(l2));
325 eina_list_free(l2);
326 eina_list_free(l1);
327
328 count = sizeof(data2) / sizeof(data2[0]);
329 l1 = NULL;
330 for (i = 0; i < count; i++)
331 l1 = eina_list_sorted_insert(l1, eina_int_cmp, data2 + i);
332
333 fail_if(l1 == NULL);
334 fail_if(!eina_list_sorted_check(l1));
335 eina_list_free(l1);
336
337 eina_shutdown();
338}
339END_TEST
340
341void
342eina_test_list(TCase *tc)
343{
344 tcase_add_test(tc, eina_test_simple);
345 tcase_add_test(tc, eina_test_merge);
346 tcase_add_test(tc, eina_test_sorted_insert);
347}