62 lines
1.8 KiB
C
62 lines
1.8 KiB
C
#include "c_PtrLinkBag.h"
|
||||
|
|
#include <stdlib.h>
|
|||
|
|
#include <stdio.h>
|
|||
|
|
#include <assert.h>
|
|||
|
|
|
|||
|
|
int main(int argc, char** argv){
|
|||
|
|
printf("開始執行 c_PtrLinkBag 測試...\n");
|
|||
|
|
|
|||
|
|
c_PtrLinkBag_t bag;
|
|||
|
|
c_PtrLinkBag_Init(&bag);
|
|||
|
|
|
|||
|
|
int v1 = 10, v2 = 20, v3 = 30;
|
|||
|
|
|
|||
|
|
// 1. 測試新增 (使用頭插法,順序會是 30 -> 20 -> 10)
|
|||
|
|
c_PtrLinkBag_Add(&bag, &v1);
|
|||
|
|
c_PtrLinkBag_Add(&bag, &v2);
|
|||
|
|
c_PtrLinkBag_Add(&bag, &v3);
|
|||
|
|
|
|||
|
|
// 2. 測試走訪
|
|||
|
|
c_PtrLinkBagIter_t iter;
|
|||
|
|
c_PtrLinkBagIter_Init(&iter, &bag);
|
|||
|
|
|
|||
|
|
printf("目前鏈結串列內容: ");
|
|||
|
|
while (c_PtrLinkBagIter_HasNext(&iter)) {
|
|||
|
|
int* val = (int*)c_PtrLinkBagIter_Next(&iter);
|
|||
|
|
printf("%d ", *val);
|
|||
|
|
}
|
|||
|
|
printf("\n");
|
|||
|
|
|
|||
|
|
// 3. 測試在迭代過程中刪除特定元素 (例如刪除 20)
|
|||
|
|
c_PtrLinkBagIter_Init(&iter, &bag);
|
|||
|
|
while (c_PtrLinkBagIter_HasNext(&iter)) {
|
|||
|
|
int* val = (int*)c_PtrLinkBagIter_Get(&iter);
|
|||
|
|
if (*val == 20) {
|
|||
|
|
c_PtrLinkBagIter_Remove(&iter); // 刪除 20,iter->node 自動指向 10
|
|||
|
|
printf("[Log] 迭代器成功刪除了 20\n");
|
|||
|
|
} else {
|
|||
|
|
c_PtrLinkBagIter_Next(&iter); // 沒刪除時才手動前進
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 4. 驗證刪除後的背包內容 (預期只剩 30 -> 10)
|
|||
|
|
c_PtrLinkBagIter_Init(&iter, &bag);
|
|||
|
|
assert(*(int*)c_PtrLinkBagIter_Next(&iter) == 30);
|
|||
|
|
assert(*(int*)c_PtrLinkBagIter_Next(&iter) == 10);
|
|||
|
|
assert(c_PtrLinkBagIter_HasNext(&iter) == C_FALSE);
|
|||
|
|
|
|||
|
|
// 5. 測試一般刪除 (Remove)
|
|||
|
|
c_err_t err = c_PtrLinkBag_Remove(&bag, &v3);
|
|||
|
|
assert(err == C_ERR_OK);
|
|||
|
|
|
|||
|
|
// 檢查是不是只剩 10
|
|||
|
|
c_PtrLinkBagIter_Init(&iter, &bag);
|
|||
|
|
assert(*(int*)c_PtrLinkBagIter_Get(&iter) == 10);
|
|||
|
|
|
|||
|
|
// 清除記憶體
|
|||
|
|
c_PtrLinkBag_Destroy(&bag);
|
|||
|
|
printf("所有測試成功通過!\n");
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|