myxce/src/lib/testsuite/test_xlist.c
2026-01-12 15:27:54 +08:00

139 lines
2.4 KiB
C

#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unity.h>
#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);
}