#include "c_SeqSearchST.h" #include #include #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; }