forked from lei.chen/myxce
139 lines
2.4 KiB
C
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);
|
|
}
|