开始设计
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user