/* EINA - EFL data type library * Copyright (C) 2008 Cedric Bail * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; * if not, see . */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include "eina_suite.h" #include "Eina.h" START_TEST(eina_array_simple) { Eina_Array *ea; char *tmp; Eina_Array_Iterator it; unsigned int i; eina_init(); ea = eina_array_new(11); fail_if(!ea); for (i = 0; i < 201; ++i) { tmp = malloc(sizeof(char) * 10); fail_if(!tmp); eina_convert_itoa(i, tmp); eina_array_push(ea, tmp); } fail_if(eina_array_data_get(ea, 10) == NULL); fail_if(atoi(eina_array_data_get(ea, 10)) != 10); tmp = eina_array_pop(ea); fail_if(tmp == NULL); fail_if(atoi(tmp) != 200); free(tmp); EINA_ARRAY_ITER_NEXT(ea, i, tmp, it) { fail_if((unsigned int)atoi(tmp) != i); free(tmp); } fail_if(i != 200); eina_array_clean(ea); eina_array_flush(ea); eina_array_free(ea); eina_shutdown(); } END_TEST START_TEST(eina_array_static) { Eina_Array sea; char *tmp; Eina_Array_Iterator it; unsigned int i; eina_init(); eina_array_step_set(&sea, sizeof(sea), 10); for (i = 0; i < 200; ++i) { tmp = malloc(sizeof(char) * 10); fail_if(!tmp); eina_convert_itoa(i, tmp); eina_array_push(&sea, tmp); } fail_if(eina_array_data_get(&sea, 10) == NULL); fail_if(atoi(eina_array_data_get(&sea, 10)) != 10); EINA_ARRAY_ITER_NEXT(&sea, i, tmp, it) { fail_if((unsigned int)atoi(tmp) != i); free(tmp); } fail_if(i != 200); eina_array_clean(&sea); eina_array_flush(&sea); eina_shutdown(); } END_TEST Eina_Bool keep_int(void *data, void *gdata) { int *tmp = data; fail_if(gdata); fail_if(!tmp); if (*tmp == 0) return EINA_FALSE; return EINA_TRUE; } START_TEST(eina_array_remove_stuff) { Eina_Array *ea; int *tmp; Eina_Array_Iterator it; unsigned int i; eina_init(); ea = eina_array_new(64); fail_if(!ea); for (i = 0; i < 1000; ++i) { tmp = malloc(sizeof(int)); fail_if(!tmp); *tmp = i; eina_array_push(ea, tmp); } // Remove the first 10 items for (i = 0; i < 10; ++i) { tmp = eina_array_data_get(ea, i); fail_if(!tmp); *tmp = 0; } fail_if(eina_array_remove(ea, keep_int, NULL) != EINA_TRUE); fail_if(eina_array_count(ea) != 990); EINA_ARRAY_ITER_NEXT(ea, i, tmp, it) fail_if(*tmp == 0); // Remove the last items for (i = 980; i < 990; ++i) { tmp = eina_array_data_get(ea, i); fail_if(!tmp); *tmp = 0; } eina_array_remove(ea, keep_int, NULL); // Remove all items fail_if(eina_array_count(ea) != 980); EINA_ARRAY_ITER_NEXT(ea, i, tmp, it) { fail_if(*tmp == 0); *tmp = 0; } eina_array_remove(ea, keep_int, NULL); fail_if(eina_array_count(ea) != 0); eina_array_free(ea); eina_shutdown(); } END_TEST void eina_test_array(TCase *tc) { tcase_add_test(tc, eina_array_simple); tcase_add_test(tc, eina_array_static); tcase_add_test(tc, eina_array_remove_stuff); }