Files
cKit/Search/c_SeqSearchST.t.c
T
2026-08-30 22:24:45 +08:00

76 lines
2.5 KiB
C

#include "c_SeqSearchST.h"
#include <stdlib.h>
#include <stdio.h>
#include "c_Test.h"
static int st_compare_chars(const void* a, const void* b, void* args) {
(void)args;
char char1 = *(const char*)a;
char char2 = *(const char*)b;
return char1 - char2;
}
TEST_CASE(test_c_SeqSearchST_CRUD_Flow) {
c_SeqSearchST_t st;
c_err_t err = c_SeqSearchST_Init(&st, sizeof(char), sizeof(int), st_compare_chars, NULL, &c_DefaultAllocator);
ASSERT_INT_EQ(C_ERR_OK, err);
char key_S = 'S'; int val_S = 100;
char key_E = 'E'; int val_E = 200;
char key_A = 'A'; int val_A = 300;
// 1. Put 添加行为断言
ASSERT_INT_EQ(C_ERR_OK, c_SeqSearchST_Put(&st, &key_S, &val_S));
ASSERT_INT_EQ(C_ERR_OK, c_SeqSearchST_Put(&st, &key_E, &val_E));
ASSERT_INT_EQ(C_ERR_OK, c_SeqSearchST_Put(&st, &key_A, &val_A));
ASSERT_INT_EQ(3, (int)st.size);
// 包含性状态核验
ASSERT_TRUE(c_SeqSearchST_Contains(&st, &key_E));
char key_X = 'X';
ASSERT_TRUE(!c_SeqSearchST_Contains(&st, &key_X));
// 2. Get 读取断言
int get_result = 0;
ASSERT_INT_EQ(C_ERR_OK, c_SeqSearchST_Get(&st, &key_E, &get_result));
ASSERT_INT_EQ(200, get_result);
// 3. Put 覆写更新(Overwrite)断言
int update_val_E = 999;
ASSERT_INT_EQ(C_ERR_OK, c_SeqSearchST_Put(&st, &key_E, &update_val_E));
ASSERT_INT_EQ(3, (int)st.size);
ASSERT_INT_EQ(C_ERR_OK, c_SeqSearchST_Get(&st, &key_E, &get_result));
ASSERT_INT_EQ(999, get_result);
// 4. Delete 节点移出断言
ASSERT_INT_EQ(C_ERR_OK, c_SeqSearchST_Delete(&st, &key_E));
ASSERT_INT_EQ(2, (int)st.size);
ASSERT_INT_EQ(C_ERR_NOTFOUND, c_SeqSearchST_Get(&st, &key_E, &get_result));
c_SeqSearchST_Destroy(&st);
}
TEST_CASE(test_c_SeqSearchST_ParamDefenses) {
c_SeqSearchST_t local_st;
c_SeqSearchST_Init(&local_st, sizeof(char), sizeof(int), st_compare_chars, NULL, NULL);
char k = 'W';
int v = 88;
// 5. 验证拦截线
ASSERT_INT_EQ(C_ERR_PARAM, c_SeqSearchST_Init(NULL, sizeof(char), sizeof(int), st_compare_chars, NULL, NULL));
ASSERT_INT_EQ(C_ERR_PARAM, c_SeqSearchST_Put(NULL, &k, &v));
ASSERT_INT_EQ(C_ERR_EMPTY, c_SeqSearchST_Delete(&local_st, &k));
c_SeqSearchST_Destroy(&local_st);
}
// ==========================================
// 5. 主集成入口
// ==========================================
int main(void) {
TEST_START(C_SeqSearchST_Isolated_TestSuite);
RUN_TEST(test_c_SeqSearchST_CRUD_Flow);
RUN_TEST(test_c_SeqSearchST_ParamDefenses);
TEST_REPORT();
RETURN_TEST_STATUS;
}