#include "c_ArrayList.h" #include #include 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; }