7 #include "eina_suite.h"
13 static void eina_matrixsparse_free_cell_cb(void *user_data __UNUSED__,
14 void *cell_data __UNUSED__)
18 static void matrixsparse_initialize(Eina_Matrixsparse *matrix,
19 long data[MAX_ROWS][MAX_COLS],
26 for (i = 0; i < nrows; i++)
27 for (j = 0; j < ncols; j++)
30 r = eina_matrixsparse_data_idx_set(matrix, i, j, &data[i][j]);
31 fail_if(r == EINA_FALSE);
36 static void matrixsparse_check(Eina_Matrixsparse *matrix,
37 long data[MAX_ROWS][MAX_COLS],
38 unsigned long nrows __UNUSED__,
39 unsigned long ncols __UNUSED__)
44 for (i = 0; i < MAX_ROWS; i++)
45 for (j = 0; j < MAX_COLS; j++)
49 test1 = eina_matrixsparse_data_idx_get(matrix, i, j);
50 fail_if(test1 == NULL || *test1 != data[i][j]);
54 test1 = eina_matrixsparse_data_idx_get(matrix, i, j);
55 fail_if(test1 != NULL);
60 START_TEST(eina_test_simple)
62 Eina_Matrixsparse *matrix = NULL;
63 Eina_Matrixsparse_Cell *cell = NULL;
65 long *test1, value, value2, value3, value4;
67 unsigned long row, col;
69 long data[MAX_ROWS][MAX_COLS];
71 for (i = 0; i < MAX_ROWS; i++)
72 for (j = 0; j < MAX_COLS; j++)
109 matrix = eina_matrixsparse_new(MAX_ROWS, MAX_COLS,
110 eina_matrixsparse_free_cell_cb, data);
111 fail_if(matrix == NULL);
113 r = eina_matrixsparse_cell_idx_get(matrix, 3, 5, &cell);
114 fail_if(r == EINA_FALSE);
115 fail_if(cell != NULL);
117 matrixsparse_initialize(matrix, data, MAX_ROWS, MAX_COLS);
120 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 0);
121 fail_if(test1 == NULL);
122 fail_if(*test1 != data[3][0]);
124 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 5);
125 fail_if(test1 == NULL);
126 fail_if(*test1 != data[3][5]);
128 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 6);
129 fail_if(test1 == NULL);
130 fail_if(*test1 != data[3][6]);
132 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 1);
133 fail_if(test1 != NULL);
135 r = eina_matrixsparse_cell_idx_get(matrix, 3, 5, &cell);
136 fail_if(r == EINA_FALSE);
137 fail_if(cell == NULL);
139 test1 = eina_matrixsparse_cell_data_get(cell);
140 fail_if(test1 == NULL);
141 fail_if(*test1 != data[3][5]);
143 r = eina_matrixsparse_cell_position_get(cell, &row, &col);
144 fail_if(r == EINA_FALSE);
145 fail_if(row != 3 || col != 5);
147 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 3);
148 fail_if(*test1 != data[4][3]);
150 test1 = eina_matrixsparse_data_idx_get(matrix, 1, 3);
151 fail_if(*test1 != data[1][3]);
154 r = eina_matrixsparse_data_idx_set(matrix, 1, 9, &data[1][9]);
155 fail_if(r == EINA_FALSE);
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]);
163 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 3);
164 fail_if(test1 == NULL || *test1 != value);
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]);
172 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 5);
173 fail_if(test1 == NULL);
174 fail_if(*test1 != value2);
176 r = eina_matrixsparse_cell_idx_get(matrix, 4, 2, &cell);
177 fail_if(r == EINA_FALSE || cell == NULL);
179 r = eina_matrixsparse_cell_data_set(cell, &value3);
180 fail_if(r == EINA_FALSE);
183 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 2);
184 fail_if(test1 == NULL || *test1 != value3);
186 r = eina_matrixsparse_data_idx_replace(matrix,
191 fail_if(r == EINA_FALSE || test1 != NULL);
196 r = eina_matrixsparse_row_idx_clear(matrix, 4);
197 fail_if(r == EINA_FALSE);
204 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 3);
205 fail_if(test1 != NULL);
207 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 8);
208 fail_if(test1 != NULL);
210 test1 = eina_matrixsparse_data_idx_get(matrix, 5, 3);
211 fail_if(*test1 != data[5][3]);
213 r = eina_matrixsparse_column_idx_clear(matrix, 3);
214 fail_if(r != EINA_TRUE);
222 r = eina_matrixsparse_cell_idx_clear(matrix, 3, 5);
223 fail_if(r != EINA_TRUE);
226 r = eina_matrixsparse_cell_idx_clear(matrix, 3, 9);
227 fail_if(r != EINA_TRUE);
230 r = eina_matrixsparse_cell_idx_clear(matrix, 4, 3);
231 fail_if(r != EINA_TRUE);
234 r = eina_matrixsparse_cell_idx_get(matrix, 3, 7, &cell);
235 fail_if(r == EINA_FALSE);
236 fail_if(cell == NULL);
238 r = eina_matrixsparse_cell_clear(cell);
239 fail_if(r == EINA_FALSE);
242 r = eina_matrixsparse_cell_idx_get(matrix, 2, 7, &cell);
243 fail_if(r == EINA_FALSE);
245 r = eina_matrixsparse_cell_idx_clear(matrix, 2, 8);
246 fail_if(r == EINA_FALSE);
249 r = eina_matrixsparse_cell_idx_clear(matrix, 2, 7);
250 fail_if(r == EINA_FALSE);
253 r = eina_matrixsparse_cell_idx_get(matrix, 7, 7, &cell);
254 fail_if(r == EINA_FALSE);
256 r = eina_matrixsparse_row_idx_clear(matrix, 8);
257 fail_if(r == EINA_FALSE);
260 r = eina_matrixsparse_row_idx_clear(matrix, 7);
261 fail_if(r == EINA_FALSE);
265 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
266 eina_matrixsparse_free(matrix);
272 START_TEST(eina_test_resize)
274 Eina_Matrixsparse *matrix = NULL;
277 unsigned long nrows, ncols;
279 long data[MAX_ROWS][MAX_COLS];
281 for (i = 0; i < MAX_ROWS; i++)
282 for (j = 0; j < MAX_COLS; j++)
287 matrix = eina_matrixsparse_new(MAX_ROWS, MAX_COLS,
288 eina_matrixsparse_free_cell_cb, data);
289 fail_if(matrix == NULL);
321 matrixsparse_initialize(matrix, data, MAX_ROWS, MAX_COLS);
323 eina_matrixsparse_size_get(matrix, &nrows, &ncols);
324 fail_if(nrows != MAX_ROWS || ncols != MAX_COLS);
326 r = eina_matrixsparse_size_set(matrix, nrows - 2, ncols - 2);
327 fail_if(r == EINA_FALSE);
334 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
336 r = eina_matrixsparse_size_set(matrix, 5, 1);
337 fail_if(r == EINA_FALSE);
357 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
359 r = eina_matrixsparse_size_set(matrix, 1, 1);
360 fail_if(r == EINA_FALSE);
363 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
365 r = eina_matrixsparse_size_set(matrix, 5, 4);
366 fail_if(r == EINA_FALSE);
368 r = eina_matrixsparse_data_idx_set(matrix, 4, 2, &data[4][2]);
369 fail_if(r == EINA_FALSE);
371 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
373 r = eina_matrixsparse_size_set(matrix, 5, 1);
374 fail_if(r == EINA_FALSE);
376 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
378 eina_matrixsparse_free(matrix);
384 START_TEST(eina_test_iterators)
386 Eina_Matrixsparse *matrix = NULL;
387 Eina_Matrixsparse_Cell *cell = NULL;
388 Eina_Iterator *it = NULL;
392 unsigned long row, col;
394 long data[MAX_ROWS][MAX_COLS];
397 for (i = 0; i < MAX_ROWS; i++)
399 for (j = 0; j < MAX_COLS; j++)
401 data[i][j] = value++;
402 printf("%4ld ", data[i][j]);
409 matrix = eina_matrixsparse_new(MAX_ROWS, MAX_COLS,
410 eina_matrixsparse_free_cell_cb, data);
411 fail_if(matrix == NULL);
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);
450 it = eina_matrixsparse_iterator_new(matrix);
452 EINA_ITERATOR_FOREACH(it, cell)
454 fail_if(cell == NULL);
455 r = eina_matrixsparse_cell_position_get(cell, &row, &col);
456 fail_if(r == EINA_FALSE);
458 test1 = eina_matrixsparse_cell_data_get(cell);
459 fail_if(test1 == NULL || *test1 != data[row][col]);
461 eina_iterator_free(it);
463 it = eina_matrixsparse_iterator_complete_new(matrix);
465 EINA_ITERATOR_FOREACH(it, cell)
467 fail_if(cell == NULL);
468 r = eina_matrixsparse_cell_position_get(cell, &row, &col);
469 fail_if(r == EINA_FALSE);
471 test1 = eina_matrixsparse_cell_data_get(cell);
473 fail_if(*test1 != data[row][col]);
475 eina_iterator_free(it);
477 eina_matrixsparse_free(matrix);
484 eina_test_matrixsparse(TCase *tc)
486 tcase_add_test(tc, eina_test_simple);
487 tcase_add_test(tc, eina_test_resize);
488 tcase_add_test(tc, eina_test_iterators);