76 lines
2.5 KiB
C
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;
|
|
} |