#include #include #include #include #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); }