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

61 lines
1.8 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "c_PtrLinkBag.h"
#include <stdlib.h>
#include <stdio.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); // 刪除 20iter->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_SUCCESS);
// 檢查是不是只剩 10
c_PtrLinkBagIter_Init(&iter, &bag);
assert(*(int*)c_PtrLinkBagIter_Get(&iter) == 10);
// 清除記憶體
c_PtrLinkBag_Destroy(&bag);
printf("所有測試成功通過!\n");
return 0;
}