snapshot before regression test

This commit is contained in:
t
2026-07-18 19:25:40 +08:00
commit 796222a300
2295 changed files with 206453 additions and 0 deletions

View 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 分配器,不支持单个 freereset 一次性回收
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