54 lines
1.9 KiB
C
54 lines
1.9 KiB
C
#include "c_ArrayStack.h"
|
|
#include <c_Test.h>
|
|
|
|
|
|
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;
|
|
}
|