aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/eina/src/tests/eina_test_matrixsparse.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/eina/src/tests/eina_test_matrixsparse.c')
-rw-r--r--libraries/eina/src/tests/eina_test_matrixsparse.c489
1 files changed, 489 insertions, 0 deletions
diff --git a/libraries/eina/src/tests/eina_test_matrixsparse.c b/libraries/eina/src/tests/eina_test_matrixsparse.c
new file mode 100644
index 0000000..e07b1ee
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_matrixsparse.c
@@ -0,0 +1,489 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include <stdio.h>
6
7#include "eina_suite.h"
8#include "Eina.h"
9
10#define MAX_ROWS 10
11#define MAX_COLS 10
12
13static void eina_matrixsparse_free_cell_cb(void *user_data __UNUSED__,
14 void *cell_data __UNUSED__)
15{
16}
17
18static void matrixsparse_initialize(Eina_Matrixsparse *matrix,
19 long data[MAX_ROWS][MAX_COLS],
20 unsigned long nrows,
21 unsigned long ncols)
22{
23 unsigned long i, j;
24 Eina_Bool r;
25
26 for (i = 0; i < nrows; i++)
27 for (j = 0; j < ncols; j++)
28 if (data[i][j] != 0)
29 {
30 r = eina_matrixsparse_data_idx_set(matrix, i, j, &data[i][j]);
31 fail_if(r == EINA_FALSE);
32 }
33
34}
35
36static void matrixsparse_check(Eina_Matrixsparse *matrix,
37 long data[MAX_ROWS][MAX_COLS],
38 unsigned long nrows __UNUSED__,
39 unsigned long ncols __UNUSED__)
40{
41 unsigned long i, j;
42 long *test1;
43
44 for (i = 0; i < MAX_ROWS; i++)
45 for (j = 0; j < MAX_COLS; j++)
46 {
47 if (data[i][j] != 0)
48 {
49 test1 = eina_matrixsparse_data_idx_get(matrix, i, j);
50 fail_if(test1 == NULL || *test1 != data[i][j]);
51 }
52 else
53 {
54 test1 = eina_matrixsparse_data_idx_get(matrix, i, j);
55 fail_if(test1 != NULL);
56 }
57 }
58}
59
60START_TEST(eina_test_simple)
61{
62 Eina_Matrixsparse *matrix = NULL;
63 Eina_Matrixsparse_Cell *cell = NULL;
64 Eina_Bool r;
65 long *test1, value, value2, value3, value4;
66 unsigned long i, j;
67 unsigned long row, col;
68
69 long data[MAX_ROWS][MAX_COLS];
70
71 for (i = 0; i < MAX_ROWS; i++)
72 for (j = 0; j < MAX_COLS; j++)
73 data[i][j] = 0;
74
75 data[0][3] = 3;
76 data[1][3] = 13;
77 data[1][6] = 16;
78 data[1][9] = 19;
79 data[1][8] = 18;
80 data[1][7] = 17;
81 data[2][8] = 28;
82 data[2][7] = 27;
83 data[2][6] = 26;
84 data[3][5] = 35;
85 data[3][6] = 36;
86 data[3][7] = 37;
87 data[3][9] = 39;
88 data[3][0] = 30;
89 data[4][6] = 46;
90 data[4][8] = 48;
91 data[4][2] = 42;
92 data[4][3] = 43;
93 data[4][7] = 47;
94 data[5][3] = 53;
95 data[6][3] = 63;
96 data[6][4] = 64;
97 data[6][6] = 66;
98 data[7][3] = 73;
99 data[7][7] = 77;
100 data[8][8] = 88;
101
102 value = -1;
103 value2 = -2;
104 value3 = -3;
105 value4 = -4;
106
107 eina_init();
108
109 matrix = eina_matrixsparse_new(MAX_ROWS, MAX_COLS,
110 eina_matrixsparse_free_cell_cb, data);
111 fail_if(matrix == NULL);
112
113 r = eina_matrixsparse_cell_idx_get(matrix, 3, 5, &cell);
114 fail_if(r == EINA_FALSE);
115 fail_if(cell != NULL);
116
117 matrixsparse_initialize(matrix, data, MAX_ROWS, MAX_COLS);
118
119 /* data fetching */
120 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 0);
121 fail_if(test1 == NULL);
122 fail_if(*test1 != data[3][0]);
123
124 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 5);
125 fail_if(test1 == NULL);
126 fail_if(*test1 != data[3][5]);
127
128 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 6);
129 fail_if(test1 == NULL);
130 fail_if(*test1 != data[3][6]);
131
132 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 1);
133 fail_if(test1 != NULL);
134
135 r = eina_matrixsparse_cell_idx_get(matrix, 3, 5, &cell);
136 fail_if(r == EINA_FALSE);
137 fail_if(cell == NULL);
138
139 test1 = eina_matrixsparse_cell_data_get(cell);
140 fail_if(test1 == NULL);
141 fail_if(*test1 != data[3][5]);
142
143 r = eina_matrixsparse_cell_position_get(cell, &row, &col);
144 fail_if(r == EINA_FALSE);
145 fail_if(row != 3 || col != 5);
146
147 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 3);
148 fail_if(*test1 != data[4][3]);
149
150 test1 = eina_matrixsparse_data_idx_get(matrix, 1, 3);
151 fail_if(*test1 != data[1][3]);
152
153 /* data changing */
154 r = eina_matrixsparse_data_idx_set(matrix, 1, 9, &data[1][9]);
155 fail_if(r == EINA_FALSE);
156
157 r = eina_matrixsparse_data_idx_replace(matrix, 4, 3, &value, (void **)&test1);
158 fail_if(r == EINA_FALSE);
159 fail_if(test1 == NULL);
160 fail_if(*test1 != data[4][3]);
161 data[4][3] = value;
162
163 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 3);
164 fail_if(test1 == NULL || *test1 != value);
165
166 r = eina_matrixsparse_cell_data_replace(cell, &value2, (void **)&test1);
167 fail_if(r == EINA_FALSE);
168 fail_if(test1 == NULL);
169 fail_if(*test1 != data[3][5]);
170 data[3][5] = value2;
171
172 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 5);
173 fail_if(test1 == NULL);
174 fail_if(*test1 != value2);
175
176 r = eina_matrixsparse_cell_idx_get(matrix, 4, 2, &cell);
177 fail_if(r == EINA_FALSE || cell == NULL);
178
179 r = eina_matrixsparse_cell_data_set(cell, &value3);
180 fail_if(r == EINA_FALSE);
181 data[4][2] = value3;
182
183 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 2);
184 fail_if(test1 == NULL || *test1 != value3);
185
186 r = eina_matrixsparse_data_idx_replace(matrix,
187 6,
188 5,
189 &value4,
190 (void **)&test1);
191 fail_if(r == EINA_FALSE || test1 != NULL);
192 data[6][5] = value4;
193
194
195 /* cell deletion */
196 r = eina_matrixsparse_row_idx_clear(matrix, 4);
197 fail_if(r == EINA_FALSE);
198 data[4][6] = 0;
199 data[4][8] = 0;
200 data[4][2] = 0;
201 data[4][3] = 0;
202 data[4][7] = 0;
203
204 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 3);
205 fail_if(test1 != NULL);
206
207 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 8);
208 fail_if(test1 != NULL);
209
210 test1 = eina_matrixsparse_data_idx_get(matrix, 5, 3);
211 fail_if(*test1 != data[5][3]);
212
213 r = eina_matrixsparse_column_idx_clear(matrix, 3);
214 fail_if(r != EINA_TRUE);
215 data[0][3] = 0;
216 data[1][3] = 0;
217 data[4][3] = 0;
218 data[5][3] = 0;
219 data[6][3] = 0;
220 data[7][3] = 0;
221
222 r = eina_matrixsparse_cell_idx_clear(matrix, 3, 5);
223 fail_if(r != EINA_TRUE);
224 data[3][5] = 0;
225
226 r = eina_matrixsparse_cell_idx_clear(matrix, 3, 9);
227 fail_if(r != EINA_TRUE);
228 data[3][9] = 0;
229
230 r = eina_matrixsparse_cell_idx_clear(matrix, 4, 3);
231 fail_if(r != EINA_TRUE);
232 data[4][3] = 0;
233
234 r = eina_matrixsparse_cell_idx_get(matrix, 3, 7, &cell);
235 fail_if(r == EINA_FALSE);
236 fail_if(cell == NULL);
237
238 r = eina_matrixsparse_cell_clear(cell);
239 fail_if(r == EINA_FALSE);
240 data[3][7] = 0;
241
242 r = eina_matrixsparse_cell_idx_get(matrix, 2, 7, &cell);
243 fail_if(r == EINA_FALSE);
244
245 r = eina_matrixsparse_cell_idx_clear(matrix, 2, 8);
246 fail_if(r == EINA_FALSE);
247 data[2][8] = 0;
248
249 r = eina_matrixsparse_cell_idx_clear(matrix, 2, 7);
250 fail_if(r == EINA_FALSE);
251 data[2][7] = 0;
252
253 r = eina_matrixsparse_cell_idx_get(matrix, 7, 7, &cell);
254 fail_if(r == EINA_FALSE);
255
256 r = eina_matrixsparse_row_idx_clear(matrix, 8);
257 fail_if(r == EINA_FALSE);
258 data[8][8] = 0;
259
260 r = eina_matrixsparse_row_idx_clear(matrix, 7);
261 fail_if(r == EINA_FALSE);
262 data[7][3] = 0;
263 data[7][7] = 0;
264
265 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
266 eina_matrixsparse_free(matrix);
267
268 eina_shutdown();
269}
270END_TEST
271
272START_TEST(eina_test_resize)
273{
274 Eina_Matrixsparse *matrix = NULL;
275 Eina_Bool r;
276 unsigned long i, j;
277 unsigned long nrows, ncols;
278
279 long data[MAX_ROWS][MAX_COLS];
280
281 for (i = 0; i < MAX_ROWS; i++)
282 for (j = 0; j < MAX_COLS; j++)
283 data[i][j] = 0;
284
285 eina_init();
286
287 matrix = eina_matrixsparse_new(MAX_ROWS, MAX_COLS,
288 eina_matrixsparse_free_cell_cb, data);
289 fail_if(matrix == NULL);
290
291 /* cell insertion */
292 data[0][5] = 5;
293 data[1][0] = 10;
294 data[1][3] = 13;
295 data[1][6] = 16;
296 data[1][9] = 19;
297 data[1][8] = 18;
298 data[1][7] = 17;
299 data[2][8] = 28;
300 data[2][7] = 27;
301 data[2][6] = 26;
302 data[3][0] = 30;
303 data[3][5] = 35;
304 data[3][6] = 36;
305 data[3][7] = 37;
306 data[3][9] = 39;
307 data[3][0] = 30;
308 data[4][8] = 48;
309 data[4][2] = 42;
310 data[4][3] = 43;
311 data[4][7] = 47;
312 data[4][6] = 46;
313 data[5][3] = 53;
314 data[6][3] = 63;
315 data[6][4] = 64;
316 data[6][6] = 66;
317 data[7][3] = 73;
318 data[7][7] = 77;
319 data[8][8] = 88;
320
321 matrixsparse_initialize(matrix, data, MAX_ROWS, MAX_COLS);
322
323 eina_matrixsparse_size_get(matrix, &nrows, &ncols);
324 fail_if(nrows != MAX_ROWS || ncols != MAX_COLS);
325
326 r = eina_matrixsparse_size_set(matrix, nrows - 2, ncols - 2);
327 fail_if(r == EINA_FALSE);
328 data[1][9] = 0;
329 data[1][8] = 0;
330 data[2][8] = 0;
331 data[3][9] = 0;
332 data[4][8] = 0;
333 data[8][8] = 0;
334 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
335
336 r = eina_matrixsparse_size_set(matrix, 5, 1);
337 fail_if(r == EINA_FALSE);
338 data[0][5] = 0;
339 data[1][3] = 0;
340 data[1][6] = 0;
341 data[1][7] = 0;
342 data[2][7] = 0;
343 data[2][6] = 0;
344 data[3][5] = 0;
345 data[3][6] = 0;
346 data[3][7] = 0;
347 data[4][2] = 0;
348 data[4][3] = 0;
349 data[4][7] = 0;
350 data[4][6] = 0;
351 data[5][3] = 0;
352 data[6][3] = 0;
353 data[6][4] = 0;
354 data[6][6] = 0;
355 data[7][3] = 0;
356 data[7][7] = 0;
357 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
358
359 r = eina_matrixsparse_size_set(matrix, 1, 1);
360 fail_if(r == EINA_FALSE);
361 data[3][0] = 0;
362 data[1][0] = 0;
363 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
364
365 r = eina_matrixsparse_size_set(matrix, 5, 4);
366 fail_if(r == EINA_FALSE);
367
368 r = eina_matrixsparse_data_idx_set(matrix, 4, 2, &data[4][2]);
369 fail_if(r == EINA_FALSE);
370 data[4][2] = 42;
371 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
372
373 r = eina_matrixsparse_size_set(matrix, 5, 1);
374 fail_if(r == EINA_FALSE);
375 data[4][2] = 0;
376 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
377
378 eina_matrixsparse_free(matrix);
379
380 eina_shutdown();
381}
382END_TEST
383
384START_TEST(eina_test_iterators)
385{
386 Eina_Matrixsparse *matrix = NULL;
387 Eina_Matrixsparse_Cell *cell = NULL;
388 Eina_Iterator *it = NULL;
389 Eina_Bool r;
390 long *test1, value;
391 unsigned long i, j;
392 unsigned long row, col;
393
394 long data[MAX_ROWS][MAX_COLS];
395
396 value = 0;
397 for (i = 0; i < MAX_ROWS; i++)
398 {
399 for (j = 0; j < MAX_COLS; j++)
400 {
401 data[i][j] = value++;
402 printf("%4ld ", data[i][j]);
403 }
404 printf("\n");
405 }
406
407 eina_init();
408
409 matrix = eina_matrixsparse_new(MAX_ROWS, MAX_COLS,
410 eina_matrixsparse_free_cell_cb, data);
411 fail_if(matrix == NULL);
412
413 r = eina_matrixsparse_data_idx_set(matrix, 3, 5, &data[3][5]);
414 fail_if(r == EINA_FALSE);
415 r = eina_matrixsparse_data_idx_set(matrix, 3, 6, &data[3][6]);
416 fail_if(r == EINA_FALSE);
417 r = eina_matrixsparse_data_idx_set(matrix, 3, 7, &data[3][7]);
418 fail_if(r == EINA_FALSE);
419 r = eina_matrixsparse_data_idx_set(matrix, 3, 9, &data[3][9]);
420 fail_if(r == EINA_FALSE);
421 r = eina_matrixsparse_data_idx_set(matrix, 3, 0, &data[3][0]);
422 fail_if(r == EINA_FALSE);
423 r = eina_matrixsparse_data_idx_set(matrix, 4, 6, &data[4][6]);
424 fail_if(r == EINA_FALSE);
425 r = eina_matrixsparse_data_idx_set(matrix, 4, 8, &data[4][8]);
426 fail_if(r == EINA_FALSE);
427 r = eina_matrixsparse_data_idx_set(matrix, 4, 2, &data[4][2]);
428 fail_if(r == EINA_FALSE);
429 r = eina_matrixsparse_data_idx_set(matrix, 4, 3, &data[4][3]);
430 fail_if(r == EINA_FALSE);
431 r = eina_matrixsparse_data_idx_set(matrix, 4, 7, &data[4][7]);
432 fail_if(r == EINA_FALSE);
433 r = eina_matrixsparse_data_idx_set(matrix, 6, 4, &data[6][4]);
434 fail_if(r == EINA_FALSE);
435 r = eina_matrixsparse_data_idx_set(matrix, 5, 3, &data[5][3]);
436 fail_if(r == EINA_FALSE);
437 r = eina_matrixsparse_data_idx_set(matrix, 6, 3, &data[6][3]);
438 fail_if(r == EINA_FALSE);
439 r = eina_matrixsparse_data_idx_set(matrix, 7, 3, &data[7][3]);
440 fail_if(r == EINA_FALSE);
441 r = eina_matrixsparse_data_idx_set(matrix, 0, 3, &data[0][3]);
442 fail_if(r == EINA_FALSE);
443 r = eina_matrixsparse_data_idx_set(matrix, 1, 3, &data[1][3]);
444 fail_if(r == EINA_FALSE);
445 r = eina_matrixsparse_data_idx_set(matrix, 1, 6, &data[1][6]);
446 fail_if(r == EINA_FALSE);
447 r = eina_matrixsparse_data_idx_set(matrix, 1, 9, &data[1][9]);
448 fail_if(r == EINA_FALSE);
449
450 it = eina_matrixsparse_iterator_new(matrix);
451 fail_if(it == NULL);
452 EINA_ITERATOR_FOREACH(it, cell)
453 {
454 fail_if(cell == NULL);
455 r = eina_matrixsparse_cell_position_get(cell, &row, &col);
456 fail_if(r == EINA_FALSE);
457
458 test1 = eina_matrixsparse_cell_data_get(cell);
459 fail_if(test1 == NULL || *test1 != data[row][col]);
460 }
461 eina_iterator_free(it);
462
463 it = eina_matrixsparse_iterator_complete_new(matrix);
464 fail_if(it == NULL);
465 EINA_ITERATOR_FOREACH(it, cell)
466 {
467 fail_if(cell == NULL);
468 r = eina_matrixsparse_cell_position_get(cell, &row, &col);
469 fail_if(r == EINA_FALSE);
470
471 test1 = eina_matrixsparse_cell_data_get(cell);
472 if (test1)
473 fail_if(*test1 != data[row][col]);
474 }
475 eina_iterator_free(it);
476
477 eina_matrixsparse_free(matrix);
478
479 eina_shutdown();
480}
481END_TEST
482
483void
484eina_test_matrixsparse(TCase *tc)
485{
486 tcase_add_test(tc, eina_test_simple);
487 tcase_add_test(tc, eina_test_resize);
488 tcase_add_test(tc, eina_test_iterators);
489}