64 lines
1.8 KiB
C
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;
|
|
}
|