#include "c_HashMap.h" #include "c_Test.h" #include #include static int hash_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_HashMap_O1_StandardFlow) { c_HashMap_t map; // 初始化具有 5 个拉链桶的泛型哈希映射表 (M=5),测试默认分配器 Fallback 降级机制 c_err_t err = c_HashMap_Init(&map, 5, sizeof(char), sizeof(int), hash_compare_chars, NULL, NULL); ASSERT_INT_EQ(C_ERR_OK, err); char key_P = 'P'; int val_P = 90; char key_H = 'H'; int val_H = 80; char key_Q = 'Q'; int val_Q = 70; // 1. Put 基础常数级高速录入验证 ASSERT_INT_EQ(C_ERR_OK, c_HashMap_Put(&map, &key_P, &val_P)); ASSERT_INT_EQ(C_ERR_OK, c_HashMap_Put(&map, &key_H, &val_H)); ASSERT_INT_EQ(C_ERR_OK, c_HashMap_Put(&map, &key_Q, &val_Q)); ASSERT_INT_EQ(3, (int)map.size); // 状态包含判定 ASSERT_TRUE(c_HashMap_Contains(&map, &key_H)); char key_NotExit = 'X'; ASSERT_TRUE(!c_HashMap_Contains(&map, &key_NotExit)); // 2. Get 常数级读取断言 int get_result = 0; ASSERT_INT_EQ(C_ERR_OK, c_HashMap_Get(&map, &key_H, &get_result)); ASSERT_INT_EQ(80, get_result); // 精确提取 // 3. Put 相同键覆写更新(Overwrite)特性核验 int overwrite_val_H = 9999; ASSERT_INT_EQ(C_ERR_OK, c_HashMap_Put(&map, &key_H, &overwrite_val_H)); ASSERT_INT_EQ(3, (int)map.size); // 覆写后,全局哈希大小必须守恒,依旧为 3 ASSERT_INT_EQ(C_ERR_OK, c_HashMap_Get(&map, &key_H, &get_result)); ASSERT_INT_EQ(9999, get_result); // 4. Delete 常数级拉链断开删除测试 ASSERT_INT_EQ(C_ERR_OK, c_HashMap_Delete(&map, &key_H)); ASSERT_INT_EQ(2, (int)map.size); // 递减确凿 ASSERT_INT_EQ(C_ERR_NOTFOUND, c_HashMap_Get(&map, &key_H, &get_result)); // 彻底级联反初始化释放桶空间 c_HashMap_Destroy(&map); } TEST_CASE(test_c_HashMap_ToxicityDefenses) { c_HashMap_t local_map; c_HashMap_Init(&local_map, 4, sizeof(char), sizeof(int), hash_compare_chars, NULL, &c_DefaultAllocator); char k = 'K'; int v = 11; // 5. 验证关键入参异常状态码强拦截 ASSERT_INT_EQ(C_ERR_PARAM, c_HashMap_Init(NULL, 5, sizeof(char), sizeof(int), hash_compare_chars, NULL, NULL)); ASSERT_INT_EQ(C_ERR_PARAM, c_HashMap_Put(NULL, &k, &v)); ASSERT_INT_EQ(C_ERR_PARAM, c_HashMap_Delete(NULL, &k)); ASSERT_INT_EQ(C_ERR_EMPTY, c_HashMap_Delete(&local_map, &k)); // 空仓删除安全拦截抛出 C_ERR_EMPTY c_HashMap_Destroy(&local_map); } // ========================================== // 5. 主集成入口 // ========================================== int main(void) { TEST_START(C_HashMap_Isolated_TestSuite); RUN_TEST(test_c_HashMap_O1_StandardFlow); RUN_TEST(test_c_HashMap_ToxicityDefenses); TEST_REPORT(); return (g_test_registry.failed_count > 0 ? 1 : 0); }