#include "c_ArrayStack.h" #include TEST_CASE(test_stack_basic_flow) { c_ArrayStack_t stack; // 初始化一个基础容量为 2 的双精度浮点数(double)栈 ASSERT_INT_EQ(C_ERR_OK, c_ArrayStack_Init(&stack, sizeof(double), 2, NULL)); ASSERT_TRUE(c_ArrayStack_IsEmpty(&stack)); // 1. 入栈测试 (Push) double d1 = 3.1415, d2 = 2.7182, d3 = 1.4142; ASSERT_INT_EQ(C_ERR_OK, c_ArrayStack_Push(&stack, &d1)); ASSERT_INT_EQ(C_ERR_OK, c_ArrayStack_Push(&stack, &d2)); ASSERT_INT_EQ(2, c_ArrayStack_Size(&stack)); // 2. 触发自动扩容测试 (EnsureCapacity) ASSERT_INT_EQ(C_ERR_OK, c_ArrayStack_Push(&stack, &d3)); // 触发 2 -> 4 扩容 ASSERT_INT_EQ(3, c_ArrayStack_Size(&stack)); ASSERT_INT_EQ(4, stack.capacity); // 3. 栈顶窥探测试 (Peek) double* top_ptr = (double*)c_ArrayStack_Peek(&stack); ASSERT_PTR_NOT_NULL(top_ptr); ASSERT_DOUBLE_EQ_MSG(1.4142, *top_ptr, "Peek should fetch the latest pushed element"); // 4. 出栈逻辑与先进后出顺序校验 (Pop) double out_val = 0.0; ASSERT_INT_EQ(C_ERR_OK, c_ArrayStack_Pop(&stack, &out_val)); ASSERT_DOUBLE_EQ_MSG(1.4142, out_val, "LIFO Verification Part 1"); ASSERT_INT_EQ(C_ERR_OK, c_ArrayStack_Pop(&stack, &out_val)); ASSERT_DOUBLE_EQ_MSG(2.7182, out_val, "LIFO Verification Part 2"); ASSERT_INT_EQ(C_ERR_OK, c_ArrayStack_Pop(&stack, &out_val)); ASSERT_DOUBLE_EQ_MSG(3.1415, out_val, "LIFO Verification Part 3"); // 5. 空栈防护与下溢判定 ASSERT_TRUE(c_ArrayStack_IsEmpty(&stack)); ASSERT_INT_EQ(C_ERR_OUTOFBOUND, c_ArrayStack_Pop(&stack, &out_val)); ASSERT_TRUE(c_ArrayStack_Peek(&stack) == NULL); c_ArrayStack_Destroy(&stack); } int main(void) { TEST_START(C_ArrayStack_Module_Tests); RUN_TEST(test_stack_basic_flow); TEST_REPORT(); RETURN_TEST_STATUS; }