Files
2026-08-10 01:21:15 +08:00

64 lines
1.8 KiB
C

#include "c_ArrayList.h"
#include <stdlib.h>
#include <stdio.h>
typedef struct {
int x;
int y;
} Point_t;
int main(int argc, char** argv){
printf("開始執行 c_ArrayList 測試用例...\n");
c_ArrayList_t list;
// 初始化容量為 2,用以測試自動擴容
c_err_t err = c_ArrayList_Init(&list, sizeof(Point_t), 2);
assert(err == C_ERR_SUCCESS);
Point_t p1 = {10, 20};
Point_t p2 = {30, 40};
Point_t p3 = {50, 60};
// 1. 測試新增與值複製
err = c_ArrayList_Add(&list, &p1);
assert(err == C_ERR_SUCCESS);
err = c_ArrayList_Add(&list, &p2);
assert(err == C_ERR_SUCCESS);
// 此時 list 的生命週期獨立於區域變數,修改原來的 p1 不會影響 list 裡面的內容
p1.x = 999;
// 2. 測試讀取
Point_t* res1 = (Point_t*)c_ArrayList_Get(&list, 0);
assert(res1 != NULL);
assert(res1->x == 10); // 驗證依然是 10,不受 p1 修改影響
assert(res1->y == 20);
// 3. 測試動態擴容
err = c_ArrayList_Add(&list, &p3); // 觸發擴容 (2 -> 4)
assert(err == C_ERR_SUCCESS);
assert(list.capacity == 4);
assert(list.size == 3);
// 4. 測試邊界防呆
assert(c_ArrayList_Get(&list, 5) == NULL);
// 5. 測試刪除與平移
// 目前內容: [0]:{10,20}, [1]:{30,40}, [2]:{50,60}
// 刪除索引 1 ({30,40})
err = c_ArrayList_Remove(&list, 1);
assert(err == C_ERR_SUCCESS);
assert(list.size == 2);
// 驗證原本索引 2 的物件是否成功平移到索引 1
Point_t* res2 = (Point_t*)c_ArrayList_Get(&list, 1);
assert(res2->x == 50);
assert(res2->y == 60);
// 清理資源
c_ArrayList_Destroy(&list);
assert(list.array == NULL);
printf("所有測試成功通過!\n");
return 0;
}