introduce kv

This commit is contained in:
Rongsong Shen 2026-02-13 17:05:41 +08:00
parent 48ea4a0205
commit 15fac3cda1
6 changed files with 504 additions and 4 deletions

172
src/lib/testsuite/test_kv.c Normal file
View file

@ -0,0 +1,172 @@
#include <errno.h>
#include <rtti.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unity/unity.h>
#include "kv.h"
static void test_kv_int_create()
{
var tab = makeInstance(&kvtab_int64_type, 31, NULL);
TEST_ASSERT_TRUE(tab != NULL);
destroy(tab);
}
static void test_kv_int1()
{
var tab = makeInstance(&kvtab_int64_type, 31, NULL);
int i;
int rc;
TEST_ASSERT_TRUE(tab != NULL);
for (i = 0; i < 9; i++) {
rc = key_add(tab, (void*)(long)i, (void*)(long)(i * i));
TEST_ASSERT_TRUE(rc >= 0);
}
for (i = 0; i < 9; i++) {
void* v;
rc = key_find(tab, (void*)(long)i, &v);
TEST_ASSERT_TRUE(rc > 0);
TEST_ASSERT_TRUE((int)(long)v == i * i);
}
for (i = 100; i < 199; i++) {
void* v = NULL;
rc = key_find(tab, (void*)(long)i, &v);
TEST_ASSERT_TRUE(rc == -ENOENT);
}
for (i = 0; i < 9; i++) {
void* v;
rc = key_del(tab, (void*)(long)i);
TEST_ASSERT_TRUE(rc >= 0);
rc = key_find(tab, (void*)(long)i, &v);
TEST_ASSERT_TRUE(rc == -ENOENT);
}
destroy(tab);
}
static void my_free(void* p)
{
if (p == NULL) {
return;
}
free(p);
}
static void test_kv_int2()
{
var tab = makeInstance(&kvtab_int64_type, 31, my_free);
int i;
int rc;
char buf[128];
TEST_ASSERT_TRUE(tab != NULL);
for (i = 0; i < 9; i++) {
char* p = NULL;
sprintf(buf, "value#%d", i);
p = strdup(buf);
TEST_ASSERT_TRUE(p != NULL);
rc = key_add(tab, (void*)(long)i, (void*)p);
TEST_ASSERT_TRUE(rc >= 0);
}
for (i = 0; i < 9; i++) {
void* v;
rc = key_find(tab, (void*)(long)i, &v);
TEST_ASSERT_TRUE(rc > 0);
sprintf(buf, "value#%d", i);
TEST_ASSERT_TRUE(strcmp(buf, (char*)v) == 0);
}
destroy(tab);
}
static void test_kv_string1()
{
var tab = makeInstance(&kvtab_string_type, 31, NULL);
int i;
int rc;
char buf[64];
TEST_ASSERT_TRUE(tab != NULL);
for (i = 0; i < 9; i++) {
sprintf(buf, "key#%d", i);
rc = key_add(tab, (void*)buf, (void*)(long)(i * i));
TEST_ASSERT_TRUE(rc >= 0);
}
for (i = 0; i < 9; i++) {
void* v;
sprintf(buf, "key#%d", i);
rc = key_find(tab, (void*)buf, &v);
TEST_ASSERT_TRUE(rc > 0);
TEST_ASSERT_TRUE((int)(long)v == i * i);
}
for (i = 100; i < 199; i++) {
void* v = NULL;
sprintf(buf, "key#%d", i);
rc = key_find(tab, (void*)buf, &v);
TEST_ASSERT_TRUE(rc == -ENOENT);
}
for (i = 0; i < 9; i++) {
void* v;
sprintf(buf, "key#%d", i);
rc = key_del(tab, (void*)buf);
TEST_ASSERT_TRUE(rc >= 0);
rc = key_find(tab, (void*)buf, &v);
TEST_ASSERT_TRUE(rc == -ENOENT);
}
destroy(tab);
}
static void test_kv_string_create()
{
var tab = makeInstance(&kvtab_string_type, 31, NULL);
TEST_ASSERT_TRUE(tab != NULL);
destroy(tab);
}
void test_kv(void)
{
printf("\n>> kv test\n\n");
RUN_TEST(test_kv_int_create);
RUN_TEST(test_kv_string_create);
RUN_TEST(test_kv_int1);
RUN_TEST(test_kv_int2);
RUN_TEST(test_kv_string1);
}