aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/eina/src/tests/eina_test_accessor.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/eina/src/tests/eina_test_accessor.c')
-rw-r--r--libraries/eina/src/tests/eina_test_accessor.c243
1 files changed, 243 insertions, 0 deletions
diff --git a/libraries/eina/src/tests/eina_test_accessor.c b/libraries/eina/src/tests/eina_test_accessor.c
new file mode 100644
index 0000000..3c85ef0
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_accessor.c
@@ -0,0 +1,243 @@
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
29eina_accessor_check(__UNUSED__ const Eina_Array *array,
30 int *data, int *fdata)
31{
32 fail_if(*fdata > *data);
33 *fdata = *data;
34
35 return EINA_TRUE;
36}
37
38START_TEST(eina_accessor_array_simple)
39{
40 Eina_Accessor *it;
41 Eina_Array *ea;
42 int *tmp;
43 int i;
44
45 eina_init();
46
47 ea = eina_array_new(11);
48 fail_if(!ea);
49
50 for (i = 0; i < 200; ++i)
51 {
52 tmp = malloc(sizeof(int));
53 fail_if(!tmp);
54 *tmp = i;
55
56 eina_array_push(ea, tmp);
57 }
58
59 it = eina_array_accessor_new(ea);
60 fail_if(!it);
61
62 fail_if(eina_accessor_data_get(it, 100, (void **)&tmp) != EINA_TRUE);
63 fail_if(!tmp);
64 fail_if(*tmp != 100);
65
66 i = 50;
67 eina_accessor_over(it, EINA_EACH_CB(eina_accessor_check), 50, 100, &i);
68 fail_if(i != 99);
69
70 fail_if(eina_accessor_container_get(it) != ea);
71
72 eina_accessor_free(it);
73
74 eina_array_free(ea);
75
76 eina_shutdown();
77}
78END_TEST
79
80typedef struct _Eina_Test_Inlist Eina_Test_Inlist;
81struct _Eina_Test_Inlist
82{
83 EINA_INLIST;
84 int i;
85};
86
87static Eina_Test_Inlist *
88_eina_test_inlist_build(int i)
89{
90 Eina_Test_Inlist *tmp;
91
92 tmp = malloc(sizeof(Eina_Test_Inlist));
93 fail_if(!tmp);
94 tmp->i = i;
95
96 return tmp;
97}
98
99static Eina_Bool
100eina_accessor_inlist_data_check(__UNUSED__ const Eina_Inlist *in_list,
101 Eina_Test_Inlist *data,
102 int *fdata)
103{
104 switch (*fdata)
105 {
106 case 0: fail_if(data->i != 3227); break;
107
108 case 1: fail_if(data->i != 1664); break;
109 }
110
111 (*fdata)++;
112
113 return EINA_TRUE;
114}
115
116START_TEST(eina_accessor_inlist_simple)
117{
118 Eina_Inlist *lst = NULL;
119 Eina_Test_Inlist *tmp;
120 Eina_Test_Inlist *prev;
121 Eina_Accessor *it;
122 int i = 0;
123
124 tmp = _eina_test_inlist_build(42);
125 lst = eina_inlist_append(lst, EINA_INLIST_GET(tmp));
126 fail_if(!lst);
127
128 tmp = _eina_test_inlist_build(1664);
129 lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), lst);
130 fail_if(!lst);
131 fail_if(((Eina_Test_Inlist *)lst)->i != 42);
132
133 prev = tmp;
134 tmp = _eina_test_inlist_build(3227);
135 lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(
136 tmp), EINA_INLIST_GET(prev));
137 fail_if(!lst);
138 fail_if(((Eina_Test_Inlist *)lst)->i != 42);
139
140 tmp = _eina_test_inlist_build(27);
141 lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(tmp), NULL);
142
143 tmp = _eina_test_inlist_build(81);
144 lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), NULL);
145
146 tmp = _eina_test_inlist_build(7);
147 lst = eina_inlist_append(lst, EINA_INLIST_GET(tmp));
148
149 it = eina_inlist_accessor_new(lst);
150 fail_if(!it);
151 fail_if(eina_accessor_container_get(it) != lst);
152
153 eina_accessor_over(it, EINA_EACH_CB(eina_accessor_inlist_data_check), 2, 4, &i);
154
155 fail_if(eina_accessor_data_get(it, 5, (void **)&tmp) != EINA_TRUE);
156 fail_if(eina_accessor_data_get(it, 3, (void **)&tmp) != EINA_TRUE);
157 fail_if(tmp->i != 1664);
158 fail_if(eina_accessor_data_get(it, 3, (void **)&tmp) != EINA_TRUE);
159 fail_if(tmp->i != 1664);
160 fail_if(eina_accessor_data_get(it, 1, (void **)&tmp) != EINA_TRUE);
161 fail_if(tmp->i != 42);
162
163 eina_accessor_free(it);
164
165 fail_if(i != 2);
166}
167END_TEST
168
169static Eina_Bool
170eina_iterator_list_data_check(__UNUSED__ const Eina_List *list,
171 int *data,
172 int *fdata)
173{
174 switch (*fdata)
175 {
176 case 0: fail_if(*data != 9); break;
177
178 case 1: fail_if(*data != 6); break;
179 }
180
181 (*fdata)++;
182
183 return EINA_TRUE;
184}
185
186START_TEST(eina_accessor_list_simple)
187{
188 Eina_List *list = NULL;
189 Eina_Accessor *it;
190 int data[] = { 6, 9, 42, 1, 7, 1337, 81, 1664 };
191 int *j;
192 int i = 0;
193
194 eina_init();
195
196 list = eina_list_append(list, &data[0]);
197 fail_if(list == NULL);
198
199 list = eina_list_prepend(list, &data[1]);
200 fail_if(list == NULL);
201
202 list = eina_list_append(list, &data[2]);
203 fail_if(list == NULL);
204
205 list = eina_list_append(list, &data[3]);
206 fail_if(list == NULL);
207
208 list = eina_list_prepend(list, &data[4]);
209 fail_if(list == NULL);
210
211 list = eina_list_append(list, &data[5]);
212 fail_if(list == NULL);
213
214 list = eina_list_prepend(list, &data[6]);
215 fail_if(list == NULL);
216
217 it = eina_list_accessor_new(list);
218 fail_if(!it);
219
220 eina_accessor_over(it, EINA_EACH_CB(eina_iterator_list_data_check), 2, 4, &i);
221
222 fail_if(eina_accessor_data_get(it, 5, (void **)&j) != EINA_TRUE);
223 fail_if(*j != 1);
224 fail_if(eina_accessor_data_get(it, 3, (void **)&j) != EINA_TRUE);
225 fail_if(*j != 6);
226 fail_if(eina_accessor_data_get(it, 3, (void **)&j) != EINA_TRUE);
227 fail_if(*j != 6);
228 fail_if(eina_accessor_data_get(it, 1, (void **)&j) != EINA_TRUE);
229 fail_if(*j != 7);
230 fail_if(eina_accessor_data_get(it, 5, (void **)&j) != EINA_TRUE);
231 fail_if(*j != 1);
232
233 eina_accessor_free(it);
234}
235END_TEST
236
237void
238eina_test_accessor(TCase *tc)
239{
240 tcase_add_test(tc, eina_accessor_array_simple);
241 tcase_add_test(tc, eina_accessor_inlist_simple);
242 tcase_add_test(tc, eina_accessor_list_simple);
243}