126 lines
2.7 KiB
C
126 lines
2.7 KiB
C
#include <rtti.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unity/unity.h>
|
|
|
|
#include "kv.h"
|
|
#include "kvmgr.h"
|
|
#include "utils.h"
|
|
|
|
typedef struct {
|
|
char* key;
|
|
int data;
|
|
} kv_data_t;
|
|
|
|
static void test_kvmgr_create(void)
|
|
{
|
|
kvmgr_params_t params = { .key_type = KVMGR_KEY_STRING,
|
|
.nslots = 4,
|
|
.delta = 4,
|
|
.datakiller = NULL };
|
|
var kvmgr = makeInstance(&xkvmgr_type, ¶ms);
|
|
|
|
TEST_ASSERT_TRUE(kvmgr != NULL);
|
|
|
|
destroy(kvmgr);
|
|
}
|
|
|
|
typedef struct {
|
|
char* name;
|
|
uint16_t age;
|
|
} user_t;
|
|
|
|
static void my_user_killer(void* data)
|
|
{
|
|
user_t* u = (user_t*)data;
|
|
|
|
if (u == NULL) {
|
|
return;
|
|
}
|
|
|
|
FREEUP(u->name);
|
|
FREEUP(u);
|
|
}
|
|
|
|
static void test_kvmgr_add(void)
|
|
{
|
|
kvmgr_params_t params = { .key_type = KVMGR_KEY_STRING,
|
|
.nslots = 4,
|
|
.delta = 4,
|
|
.datakiller = my_user_killer };
|
|
var kvmgr = makeInstance(&xkvmgr_type, ¶ms);
|
|
user_t* u = NULL;
|
|
int rc = 0;
|
|
void* data = NULL;
|
|
|
|
TEST_ASSERT_TRUE(kvmgr != NULL);
|
|
|
|
u = calloc(1, sizeof(*u));
|
|
TEST_ASSERT_TRUE(u != NULL);
|
|
|
|
u->name = strdup("tester1");
|
|
TEST_ASSERT_TRUE(u->name != NULL);
|
|
|
|
u->age = 32;
|
|
|
|
rc = key_add(kvmgr, (void*)u->name, (void*)u);
|
|
TEST_ASSERT_TRUE(rc >= 0);
|
|
|
|
rc = key_find(kvmgr, (void*)u->name, &data);
|
|
TEST_ASSERT_TRUE(rc >= 0);
|
|
|
|
TEST_ASSERT_TRUE(data == u);
|
|
|
|
destroy(kvmgr);
|
|
}
|
|
|
|
static void test_kvmgr_iter(void)
|
|
{
|
|
kvmgr_params_t params = { .key_type = KVMGR_KEY_INT,
|
|
.nslots = 4,
|
|
.delta = 4,
|
|
.datakiller = NULL };
|
|
var kvmgr = makeInstance(&xkvmgr_type, ¶ms);
|
|
int rc = 0;
|
|
int i;
|
|
iterator_t it;
|
|
|
|
TEST_ASSERT_TRUE(kvmgr != NULL);
|
|
|
|
for (i = 0; i < 10; i++) {
|
|
rc = key_add(kvmgr, (void*)(long)i, (void*)(long)(i * i));
|
|
TEST_ASSERT_TRUE(rc >= 0);
|
|
}
|
|
|
|
rc = iter_make(&it, kvmgr);
|
|
TEST_ASSERT_TRUE(rc >= 0);
|
|
|
|
i = 0;
|
|
for (;;) {
|
|
void* data;
|
|
|
|
rc = iter_next(&it, &data);
|
|
TEST_ASSERT_TRUE(rc >= 0);
|
|
|
|
if (rc == RTTI_ITER_NO_DATA) {
|
|
break;
|
|
}
|
|
|
|
TEST_ASSERT_TRUE((int)(long)data == i * i);
|
|
i++;
|
|
}
|
|
|
|
TEST_ASSERT_TRUE(i == 10);
|
|
|
|
iter_destroy(&it);
|
|
|
|
destroy(kvmgr);
|
|
}
|
|
|
|
void test_kvmgr(void)
|
|
{
|
|
printf("\n>> kvmgr test\n");
|
|
RUN_TEST(test_kvmgr_create);
|
|
RUN_TEST(test_kvmgr_add);
|
|
RUN_TEST(test_kvmgr_iter);
|
|
}
|