snapshot before regression test
This commit is contained in:
138
TransPyV/Test/App/memhub_test.py.bak
Normal file
138
TransPyV/Test/App/memhub_test.py.bak
Normal file
@@ -0,0 +1,138 @@
|
||||
import stdio
|
||||
import t, c
|
||||
import memhub
|
||||
import stdlib
|
||||
import string
|
||||
|
||||
|
||||
# ============================================================
|
||||
# memhub_test - 内存管理库测试
|
||||
#
|
||||
# 测试 MemPool/MemBuddy 的 alloc/free/reset/realloc,
|
||||
# 以及 MemManager 多态虚分派(通过 __vtable__ 调用子类方法)。
|
||||
# ============================================================
|
||||
|
||||
|
||||
def memhub_test() -> int:
|
||||
stdio.printf("memhub: === Test Start ===\n")
|
||||
|
||||
# === Test 1: MemPool (bump allocator) ===
|
||||
# MemPool 是 arena bump 分配器,不支持单个 free,reset 一次性回收
|
||||
stdio.printf("memhub: === Test 1: MemPool ===\n")
|
||||
|
||||
arena1: bytes = stdlib.malloc(4096)
|
||||
if arena1 is None:
|
||||
stdio.printf("[FAIL] malloc arena1\n")
|
||||
return 1
|
||||
|
||||
pool: memhub.MemPool | t.CPtr = memhub.MemPool(arena1, 4096)
|
||||
|
||||
p1: bytes = pool.alloc(64)
|
||||
if p1 is None:
|
||||
stdio.printf("[FAIL] MemPool.alloc(64)\n")
|
||||
return 1
|
||||
|
||||
p2: bytes = pool.alloc(128)
|
||||
if p2 is None:
|
||||
stdio.printf("[FAIL] MemPool.alloc(128)\n")
|
||||
return 1
|
||||
|
||||
stdio.printf("memhub: MemPool alloc ok\n")
|
||||
|
||||
# 写入验证
|
||||
string.memset(p1, 66, 64)
|
||||
if p1[0] != 66:
|
||||
stdio.printf("[FAIL] MemPool write/read p1[0]=%d\n", p1[0])
|
||||
return 1
|
||||
|
||||
# reset 后可以重新分配
|
||||
pool.reset()
|
||||
p3: bytes = pool.alloc(64)
|
||||
if p3 is None:
|
||||
stdio.printf("[FAIL] MemPool.alloc after reset\n")
|
||||
return 1
|
||||
stdio.printf("memhub: MemPool reset ok\n")
|
||||
|
||||
# === Test 2: MemBuddy (buddy system) ===
|
||||
# MemBuddy 是伙伴系统,支持 alloc/free/realloc 合并
|
||||
stdio.printf("memhub: === Test 2: MemBuddy ===\n")
|
||||
|
||||
arena2: bytes = stdlib.malloc(65536)
|
||||
if arena2 is None:
|
||||
stdio.printf("[FAIL] malloc arena2\n")
|
||||
return 1
|
||||
|
||||
buddy: memhub.MemBuddy | t.CPtr = memhub.MemBuddy(arena2, 65536)
|
||||
|
||||
b1: bytes = buddy.alloc(64)
|
||||
if b1 is None:
|
||||
stdio.printf("[FAIL] MemBuddy.alloc(64)\n")
|
||||
return 1
|
||||
|
||||
b2: bytes = buddy.alloc(256)
|
||||
if b2 is None:
|
||||
stdio.printf("[FAIL] MemBuddy.alloc(256)\n")
|
||||
return 1
|
||||
stdio.printf("memhub: MemBuddy alloc ok\n")
|
||||
|
||||
# 写入验证
|
||||
string.memset(b1, 85, 64)
|
||||
if b1[0] != 85:
|
||||
stdio.printf("[FAIL] MemBuddy write/read b1[0]=%d\n", b1[0])
|
||||
return 1
|
||||
|
||||
# free b1 后重新 alloc,应能回收内存
|
||||
buddy.free(b1)
|
||||
b3: bytes = buddy.alloc(64)
|
||||
if b3 is None:
|
||||
stdio.printf("[FAIL] MemBuddy.alloc after free\n")
|
||||
return 1
|
||||
stdio.printf("memhub: MemBuddy free/alloc ok\n")
|
||||
|
||||
# === Test 3: MemBuddy realloc ===
|
||||
# realloc 扩展内存,验证数据保持
|
||||
stdio.printf("memhub: === Test 3: MemBuddy realloc ===\n")
|
||||
|
||||
b4: bytes = buddy.alloc(32)
|
||||
if b4 is None:
|
||||
stdio.printf("[FAIL] MemBuddy.alloc(32) for realloc\n")
|
||||
return 1
|
||||
string.memset(b4, 171, 32)
|
||||
|
||||
# realloc 到更大(32 -> 128)
|
||||
b4_new: bytes = buddy.realloc(b4, 32, 128)
|
||||
if b4_new is None:
|
||||
stdio.printf("[FAIL] MemBuddy.realloc\n")
|
||||
return 1
|
||||
|
||||
# 验证数据保持(前32字节应保持 171=0xAB)
|
||||
# 注意:b4_new[0] 是 i8(有符号),0xAB=-85,需 & 255 转无符号再比较
|
||||
if (b4_new[0] & 255) != 171:
|
||||
stdio.printf("[FAIL] MemBuddy.realloc data lost b4_new[0]=%d\n", b4_new[0])
|
||||
return 1
|
||||
stdio.printf("memhub: MemBuddy realloc ok\n")
|
||||
|
||||
# === Test 4: Polymorphism (MemManager virtual dispatch) ===
|
||||
# 用 MemManager 指针调用 MemBuddy 的 alloc,验证虚分派
|
||||
stdio.printf("memhub: === Test 4: Polymorphism ===\n")
|
||||
|
||||
mgr: memhub.MemManager | t.CPtr = (memhub.MemManager | t.CPtr)(buddy)
|
||||
if mgr is None:
|
||||
stdio.printf("[FAIL] MemManager cast\n")
|
||||
return 1
|
||||
|
||||
# 通过 MemManager 指针调用 alloc(虚分派到 MemBuddy.alloc)
|
||||
b5: bytes = mgr.alloc(64)
|
||||
if b5 is None:
|
||||
stdio.printf("[FAIL] MemManager.alloc (virtual dispatch)\n")
|
||||
return 1
|
||||
|
||||
# 验证写入正常
|
||||
string.memset(b5, 99, 64)
|
||||
if b5[0] != 99:
|
||||
stdio.printf("[FAIL] MemManager.alloc write/read\n")
|
||||
return 1
|
||||
stdio.printf("memhub: Polymorphism ok\n")
|
||||
|
||||
stdio.printf("memhub: === All Tests Passed ===\n")
|
||||
return 0
|
||||
Reference in New Issue
Block a user