Files
Viper_RegressionTesting/MpoolOopTest/App/mpooltest.vp
T
TermiNexus 3c6fb1d246 chore(test): 初始化回归测试仓(新增 .gitignore,TestsOverview.md 改为 README.md)
把 Test/ 纳入 https://git.gvsds.com/GVSDS/Viper_RegressionTesting 。

1) 新增 .gitignore —— 只保留测试源码,剔除全部构建产物:
   目录   **/output*/(output / output_opt / output_orig / output_verify / output_dbg)、
          **/temp*/(temp / temp_opt)、**/.tpv_build/
   二进制 *.exe *.obj *.o *.out *.a *.lib *.dll
   中间物 *.ll *.vpi *.pyi *.deps.txt *.deps.json *.doc.json *_sha1_map.txt
          _pyi_cache_v1.pkl _pyi_cache_v1.sig.json _shared_sym.json _phase1_manifest.json
   其它   build_all.txt(构建日志)、*.log、__pycache__/、*.bak、IDE 目录
   保留   App/*.vp、project.json / project_opt.json / project.vpj、README.md、两个 .py
   实测 `git add -A --dry-run`:196 个文件,无任何构建产物混入。

2) TestsOverview.md → README.md(作为仓库首页文档)。

3) SequentialRegressionTest.py:7 处 TestsOverview.md 引用同步改为 README.md
   (文档串、OVERVIEW 路径、read_test_order 文档与报错文案、argparse description、
   启动横幅);同时修正入口路径 PROJECTRANS —— 旧值 <root>/Projectrans.py 已不存在,
   改为 <root>/TransPyC/Projectrans.py(与 regression_test.py:45-48 记录一致),
   否则本脚本会以 "can't open file" 全量失败。
   regression_test.py 无需改动:它按目录扫描 project.json 找项目,不引用该文档。
2026-09-29 15:14:59 +08:00

92 lines
2.7 KiB
Plaintext

import t, c
from t import CInt, CPtr, CChar
import viperlib
import viperio
import stdlib
import memhub
def mpool_main() -> CInt:
buf: bytes = stdlib.malloc(256)
arena: bytes = stdlib.malloc(4096)
with memhub.MemPool(arena, 4096) as pool:
p1: bytes = pool.alloc(32)
p2: bytes = pool.alloc(64)
p3: bytes = pool.alloc(128)
if p1 != None and p2 != None and p3 != None:
viperlib.snprintf(buf, 256, "MPool bump: 3 allocs OK")
print(buf)
else:
viperlib.snprintf(buf, 256, "MPool bump: alloc FAILED")
print(buf)
pool.reset()
p4: bytes = pool.alloc(256)
if p4 != None:
viperlib.snprintf(buf, 256, "MPool bump: reset+alloc OK")
print(buf)
else:
viperlib.snprintf(buf, 256, "MPool bump: reset+alloc FAILED")
print(buf)
stdlib.free(arena)
arena2: bytes = stdlib.malloc(4096)
with memhub.MemSlab(arena2, 4096, 64) as spool:
b1: bytes = spool.alloc(64)
b2: bytes = spool.alloc(64)
b3: bytes = spool.alloc(64)
if b1 != None and b2 != None and b3 != None:
viperlib.snprintf(buf, 256, "MPool slab: 3 allocs OK")
print(buf)
else:
viperlib.snprintf(buf, 256, "MPool slab: alloc FAILED")
print(buf)
spool.free(b2)
b4: bytes = spool.alloc(64)
if b4 != None:
viperlib.snprintf(buf, 256, "MPool slab: free+realloc OK")
print(buf)
else:
viperlib.snprintf(buf, 256, "MPool slab: free+realloc FAILED")
print(buf)
stdlib.free(arena2)
arena3: bytes = stdlib.malloc(4096)
hpool: memhub.MemPool | CPtr = memhub.MemPool(arena3, 4096)
h1: bytes = hpool.alloc(32)
h2: bytes = hpool.alloc(64)
if h1 != None and h2 != None:
viperlib.snprintf(buf, 256, "MPool manual: 2 allocs OK")
print(buf)
else:
viperlib.snprintf(buf, 256, "MPool manual: alloc FAILED")
print(buf)
hpool.reset()
h3: bytes = hpool.alloc(128)
if h3 != None:
viperlib.snprintf(buf, 256, "MPool manual: reset+alloc OK")
print(buf)
else:
viperlib.snprintf(buf, 256, "MPool manual: reset+alloc FAILED")
print(buf)
stdlib.free(arena3)
arena4: bytes = stdlib.malloc(4096)
with memhub.MemPool(arena4, 4096) as bpool:
wb: viperio.Buf | CPtr = bpool.alloc_buf(128)
if wb.data != None:
viperlib.snprintf(wb.cstr(), 128, "MPool alloc_buf: hello from Buf!")
print(wb.cstr())
else:
viperlib.snprintf(buf, 256, "MPool alloc_buf: FAILED")
print(buf)
stdlib.free(arena4)
stdlib.free(buf)
return 0