Files
cKit/Foundation/c_ArrayStack.t.c
T
2026-08-30 01:48:03 +08:00

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;
}