#include "c_PtrLinkBag.h" #include #include 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_SUCCESS); // 檢查是不是只剩 10 c_PtrLinkBagIter_Init(&iter, &bag); assert(*(int*)c_PtrLinkBagIter_Get(&iter) == 10); // 清除記憶體 c_PtrLinkBag_Destroy(&bag); printf("所有測試成功通過!\n"); return 0; }