#include #include #include #include #include #include "utils.h" #include "xlist.h" static void test_xlist1(void) { xlist_t lst; char* hello = "Hello"; void* p = NULL; int idx; xlist_init(&lst, 2); idx = xlist_store(&lst, (void*)hello); TEST_ASSERT_TRUE(idx >= 0); p = xlist_get(&lst, idx); TEST_ASSERT_TRUE(p == hello); xlist_fini(&lst); } static int find_check_(void* data, va_list ap) { char* p = va_arg(ap, char*); if (data == p) { return 1; } if (p == NULL) { return 0; } if (data == NULL) { return 0; } if (strcmp((char*)data, p) == 0) { return 1; } return 0; } static void test_xlist_find(void) { xlist_t lst; char* hello = "Hello"; void* p = NULL; int idx; xlist_init(&lst, 2); idx = xlist_store(&lst, (void*)hello); TEST_ASSERT_TRUE(idx >= 0); p = xlist_find(&lst, (xlist_find_fn_t)find_check_, "Hello"); TEST_ASSERT_TRUE(p != NULL); TEST_ASSERT_TRUE(strcmp((char*)p, "Hello") == 0); xlist_fini(&lst); } static void test_xlist_del(void) { xlist_t lst; char* hello = "Hello"; void* p = NULL; int idx; int i; xlist_init(&lst, 2); for (i = 0; i < 5; i++) { idx = xlist_store(&lst, (void*)hello); TEST_ASSERT_TRUE(idx >= 0); } p = xlist_find(&lst, (xlist_find_fn_t)find_check_, "Hello"); TEST_ASSERT_TRUE(p != NULL); TEST_ASSERT_TRUE(strcmp((char*)p, "Hello") == 0); xlist_del(&lst, (void*)hello); p = xlist_find(&lst, (xlist_find_fn_t)find_check_, "Hello"); TEST_ASSERT_TRUE(p == NULL); TEST_ASSERT_TRUE(lst.count == 0); xlist_fini(&lst); } static int do_iter_(void* arg1, void* arg2) { int* count = (int*)arg2; int i = (int)(long)arg1; (*count) += i; return 0; } static void test_xlist_iter(void) { xlist_t lst; int idx; int i; int count = 0; xlist_init(&lst, 2); for (i = 0; i < 5; i++) { idx = xlist_store(&lst, (void*)(long)i); TEST_ASSERT_TRUE(idx >= 0); } xlist_iter(&lst, (xlist_iter_fn_t)do_iter_, &count); TEST_ASSERT_TRUE(count == 10); xlist_fini(&lst); } void test_xlist(void) { printf("\n>> xlist test\n\n"); RUN_TEST(test_xlist1); RUN_TEST(test_xlist_find); RUN_TEST(test_xlist_del); RUN_TEST(test_xlist_iter); }