Files
cAI/cKit/Memory/c_FixedPool.t.c
T
2026-08-10 01:21:15 +08:00

57 lines
1.7 KiB
C

#include "c_FixedPool.h"
#include <stdlib.h>
#include <stdio.h>
typedef struct {
int id;
char name[12];
} TestObject;
int main(int argc, char** argv){
printf("--- 開始執行 c_FixedPool_t 測試 ---\n");
// 建立兩個獨立的記憶體緩衝區
uint8_t block1[32]; // 約可容納 2 個 TestObject (16 bytes * 2 = 32, 考慮對齊足夠)
uint8_t block2[32];
c_FixedPool_t pool;
// 1. 初始化並掛載第一個區塊
c_err_t err = c_FixedPool_Init(&pool, sizeof(TestObject), block1, sizeof(block1));
assert(err == C_ERR_SUCCESS);
printf("初始化成功,當前可用總數: %zu\n", pool.instanceCount);
// 2. 持續分配直到第一個區塊耗盡
void* p1 = c_FixedPool_Alloc(&pool);
void* p2 = c_FixedPool_Alloc(&pool);
void* p3 = c_FixedPool_Alloc(&pool); // 超出 block1 的容量,應為 NULL
assert(p1 != NULL);
assert(p2 != NULL);
assert(p3 == NULL);
printf("第一階段分配完畢,池已成功耗盡 (OOM 觸發)。\n");
// 3. 動態追加第二個記憶體區塊 (AddBlock)
err = c_FixedPool_AddBlock(&pool, block2, sizeof(block2));
assert(err == C_ERR_SUCCESS);
printf("成功追加新區塊!當前可用總數增加。\n");
// 4. 再次分配,此時應該能成功從 block2 取得記憶體
void* p4 = c_FixedPool_Alloc(&pool);
assert(p4 != NULL);
assert(p4 != p1 && p4 != p2);
// 5. 測試回收與重複利用
c_FixedPool_Free(&pool, p1);
void* p_reuse = c_FixedPool_Alloc(&pool);
assert(p_reuse == p1); // 應優先拿回剛釋放的 p1 地址
// 6. 清理
c_FixedPool_DryUp(&pool);
c_FixedPool_Destroy(&pool);
printf("--- c_FixedPool_t 所有測試案例通過! ---\n");
return 0;
}