diff options
Diffstat (limited to 'libraries/eina/src/tests/eina_test_list.c')
-rw-r--r-- | libraries/eina/src/tests/eina_test_list.c | 387 |
1 files changed, 0 insertions, 387 deletions
diff --git a/libraries/eina/src/tests/eina_test_list.c b/libraries/eina/src/tests/eina_test_list.c deleted file mode 100644 index ce70d03..0000000 --- a/libraries/eina/src/tests/eina_test_list.c +++ /dev/null | |||
@@ -1,387 +0,0 @@ | |||
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 | |||
28 | static 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 | |||
50 | static 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 | |||
58 | START_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 | } | ||
205 | END_TEST | ||
206 | |||
207 | START_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 | } | ||
290 | END_TEST | ||
291 | |||
292 | START_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 | } | ||
339 | END_TEST | ||
340 | |||
341 | START_TEST(eina_test_list_split) | ||
342 | { | ||
343 | Eina_List *left = NULL, *right = NULL ; | ||
344 | Eina_List *list = NULL; | ||
345 | Eina_List *l; | ||
346 | void *list_data; | ||
347 | int i; | ||
348 | |||
349 | eina_init(); | ||
350 | |||
351 | list = eina_list_append(list, "tigh"); | ||
352 | list = eina_list_append(list, "adar"); | ||
353 | list = eina_list_append(list, "baltar"); | ||
354 | list = eina_list_append(list, "roslin"); | ||
355 | list = eina_list_append(list, "baltar"); | ||
356 | list = eina_list_append(list, "roslin"); | ||
357 | list = eina_list_append(list, "baltar"); | ||
358 | list = eina_list_append(list, "roslin"); | ||
359 | |||
360 | fail_if(list == NULL); | ||
361 | fail_if(eina_list_count(list) != 8); | ||
362 | |||
363 | for ( i = 0; i < 200; i++) | ||
364 | { | ||
365 | left = eina_list_split_list(list, eina_list_nth_list(list, i % 2), &right); | ||
366 | |||
367 | if (i % 2 == 0) | ||
368 | fail_if(eina_list_count(left) == 1 && eina_list_count(right) + eina_list_count(left) == i + 7); | ||
369 | else | ||
370 | fail_if(eina_list_count(left) == 2 && eina_list_count(right) + eina_list_count(left) == i + 7); | ||
371 | |||
372 | list = eina_list_merge(left, right); | ||
373 | list = eina_list_append(list, "roslin"); | ||
374 | } | ||
375 | |||
376 | eina_shutdown(); | ||
377 | } | ||
378 | END_TEST | ||
379 | |||
380 | void | ||
381 | eina_test_list(TCase *tc) | ||
382 | { | ||
383 | tcase_add_test(tc, eina_test_simple); | ||
384 | tcase_add_test(tc, eina_test_merge); | ||
385 | tcase_add_test(tc, eina_test_sorted_insert); | ||
386 | tcase_add_test(tc, eina_test_list_split); | ||
387 | } | ||