TermiNexus
|
0cac59b795
|
docs(test): README 补三个 runner 的 --exe 用法;建议实现顺序步数 68 -> 77
- 「单独运行」节:regression_test.py 增加 --exe / --only 示例(该脚本本轮已支持 --exe),
并注明三个 runner 均支持 --exe、--exe 会被绝对化、--rebuild-includes 的作用
- 「建议实现顺序」节标题「共 68 步」-> 「共 77 步」,与列表 1..77 及开头
「全部 77 个测试项目(原 68 + 2026-10 补录 9)」保持一致
|
2026-10-12 15:05:11 +08:00 |
|
TermiNexus
|
b737bedceb
|
test(lifetime): A2 补“形参位↔实参位映射”双向钉桩(受控用例)
背景:NewLifetimeRetXmodTest 曾漏检 —— ret(borrows=x) 的 pi→实参映射把模块限定函数
`m.f(...)` 误当方法(给 pi=0 加 self 偏移),取到模块名而非实参。
为防同类回归,在正向工程 NewLifetimeRetOkTest 里加两个“错就编译失败”的钉桩:
- (4a) 模块限定函数:retdep.Identity2(fr, hp)(borrows=1)。
实参 0 故意是**本帧**指针、实参 1 是**堆**指针 ⇒ 正确映射取实参 1=堆(可存进堆字段);
若误加 self 偏移 → 取成实参 0(本帧)→ 结果 FRAME → 该行报错。
- (4b) 方法:box.SelfRef(fr)(borrows=self)。
接收者是**堆**对象、用户实参是**本帧**指针 ⇒ 正确映射取接收者=堆(可存进堆字段);
若忘了 self 偏移 → 取成实参 0(本帧)→ 结果 FRAME → 该行报错。
即两个方向任一偏移错都会让本正向工程编译失败(正向工程的“错就报错”比再堆一个负向
工程更能锁死偏移量)。README 的 NewLifetimeRetOkTest 行同步说明。
|
2026-10-10 13:24:27 +08:00 |
|
TermiNexus
|
e8a61473b2
|
test(lifetime): 同步 A2 定义端'声明感知'的措辞
定义端不再'整体移除' return 本帧存储的检查,而是按被调者 @life(ret(...)) 声明
放行/报错(§14.3.2 方案 A)。更新 NewLifetimeRetEscapeTest / NewLifetimeRetOkTest
的注释与 README 描述,去掉'已移除 fail-fast'的旧说法。
|
2026-10-10 09:17:14 +08:00 |
|
TermiNexus
|
66ebd75dec
|
test(lifetime): 补齐 A2 @life(ret(...)) 的正/负向回归工程
新增 3 个工程(均登记进 regression_test.py / SequentialRegressionTest.py /
run_lifetime_negative_tests.py 的 escape/负向清单):
- NewLifetimeRetOkTest(正向):ret(heap)/ret(static)/ret(borrows=none) 的结果
可存进堆对象字段;ret(frame)/ret(borrows=x) 的结果只在本帧内使用;
同模块契约表与跨模块 .vpi(escr=) 两条取用路径都覆盖 → 编译通过 + 退出码 0。
- NewLifetimeRetEscapeTest(负向):同模块 @life(ret(frame)) 的返回值写进堆对象
字段 → LifetimeError(隔离性:FrameRet 摘要为 0,唯一报错源是 ret 契约)。
- NewLifetimeRetXmodTest(负向):跨模块 @life(noescape(x), ret(borrows=x)) 的结果
写进堆对象字段 → LifetimeError(契约经对方 .vpi 的 escr= 传来;noescape 清掉了
实参逃逸路径,判据收敛到 ret 契约)。
README.md 的 escape 测试表与负向清单同步。
|
2026-10-10 09:03:05 +08:00 |
|
TermiNexus
|
5fa5a9f37c
|
test(lifetime): 补 P3 注解形态 + P2 方法级/取地址的自动工程
- 新增 NewLifetimeAnnFieldEscapeTest:h.p: int* = &local → LifetimeError(P3 注解形态)
- 新增 NewLifetimeWillFreeMethodTest:r.Release(p) 后再用 p → LifetimeError(方法级标注,形参位含 self 偏移)
- 新增 NewLifetimeWillFreeAddrTest:stdlib.free(p) 后 &p → LifetimeError(取地址路径)
- NewLifetimeTest.CaseAnnFieldStore:p.x: int = 42 必须真的写进字段(正向)
- 注册进 SequentialRegressionTest / regression_test / run_lifetime_negative_tests + README
|
2026-10-09 14:55:52 +08:00 |
|
TermiNexus
|
e8f47e3197
|
test(lifetime): NewLifetimeTest 增 P4 所有权转移用例
CaseOwnershipTransfer:q = p 后对 p 赋值不得析构(函数内断言 dtor_hits 未变),出口释放 q 恰好一次(调用方断言);同时把 CaseAlias 的注释更新为所有权转移语义。
|
2026-10-09 08:43:58 +08:00 |
|
TermiNexus
|
cd102989a8
|
test(lifetime): 新增 P3 负向工程(堆对象字段收下本帧栈地址)
NewLifetimeFieldEscapeTest:h.p = &local(h 由 new heap hlife 得到,字段活得比本帧长)必须报 LifetimeError;同步注册到 SequentialRegressionTest / regression_test / run_lifetime_negative_tests 与 README。
|
2026-10-08 22:47:40 +08:00 |
|
TermiNexus
|
e74397e932
|
test(lifetime): 新增关键字实参路径的 willFree 负向工程
NewLifetimeWillFreeKwargTest:stdlib.free(p = p) 之后再用 p 必须报 LifetimeError,覆盖 P2 的关键字实参标记路径;同步注册到 SequentialRegressionTest / regression_test / run_lifetime_negative_tests 与 README。
|
2026-10-08 21:40:22 +08:00 |
|
TermiNexus
|
aed57de44c
|
test(lifetime): 新增 willFree 正/负向工程并注册到回归脚本
NewLifetimeWillFreeTest(二次 free)、NewLifetimeUseAfterFreeTest(释放后使用)为负向;NewLifetimeWillFreeOkTest 验证合法用法与重赋值清除失效态。同步更新 SequentialRegressionTest / regression_test / run_lifetime_negative_tests 与 README。
|
2026-10-08 21:28:55 +08:00 |
|
TermiNexus
|
1724874967
|
test(lifetime): 新增 NewLifetimeAsyncTest 负向工程;测试项目 main 统一为 export def main() -> int
- NewLifetimeAsyncTest:协程体里的 new heap slife 必须报 LifetimeError(fail-fast 的回归覆盖),已挂进 ESCAPE_PROJECTS / NEGATIVE_PROJECTS / NEGATIVE_PROJECT_NAMES 与 README。
- NewLifetimeTest / NewLifetimeFreeTest 的 main 改为 export def main() -> int,并删掉多余的 t/c 导入(与 FuncTest / FormatStringTest / NewTest 一致)。
|
2026-10-08 20:42:14 +08:00 |
|
TermiNexus
|
d0165951b7
|
test(lifetime): NewLifetimeTest 增析构调度用例,README 补 escape 项目说明
- 新增 §3.6 用例:DtorPoint.__del__ 计数验证 —— 出口释放恰好 1 次、循环 3 轮(2 次覆盖释放 + 1 次出口)共 3 次;析构与释放点一一对应。
- README:NewLifetimeTest 补析构调度覆盖;NewLifetimeFreeTest 说明手动 del 同样被拒。
|
2026-10-08 20:34:23 +08:00 |
|
TermiNexus
|
7451adf523
|
test(lifetime): 新增 NewLifetimeTest/NewLifetimeFreeTest 与 IR 断言,escape 跑法纳入新项目
- NewLifetimeTest(正向,9 用例自检 + 退出码判定):出口释放 / 循环内覆盖释放 / 别名只释放一次 / 嵌套函数登记区间隔离 / early return / void 裸 return / 仅分支里 new 时 free(NULL) / stack slife 不释放。
- NewLifetimeFreeTest(负向):对 slife 对象手动 stdlib.free → LifetimeError。
- SequentialRegressionTest 增 IR_EXPECT:编译成功后断言生成的 IR 出现 llvm.call @free(漏释放=纯泄漏,退出码看不出来);--escape/--only 纳入两个新项目,run_lifetime_negative_tests.py 同步。
|
2026-10-08 20:04:12 +08:00 |
|
TermiNexus
|
9eb037ee8f
|
test(new): NewTest 增加“stack 生命期缺省=slife”对照用例;README 同步
新增 (3) `new stack Point(7,8)`(不写 slife)与 (1) 显式 slife 等价,专门验证缺省规则;文件头补上完整缺省表:省略来源→heap,省略生命期→stack 为 slife、heap/memgr 为 hlife。
|
2026-10-08 18:21:13 +08:00 |
|
TermiNexus
|
73846979f1
|
test(lifetime): SequentialRegressionTest 支持负向项目(反向判定)
NEGATIVE_PROJECTS: EscapeTest/EscapeMethodTest/EscapeXmodTest 期望编译失败且输出含 LifetimeError;命中即通过并跳过运行阶段,编译成功=漏检直接终止,报错方向不符亦终止。
regression_test.py 的 --escape 剔除负向项目(该脚本要求编译成功+能跑,纳入会误报),并提示改用 SequentialRegressionTest 或 run_lifetime_negative_tests.py。README 同步。
|
2026-10-08 17:56:58 +08:00 |
|
TermiNexus
|
ed204852c4
|
test(lifetime): 新增生命期负向运行器;NewTest 补 memgr 用例
run_lifetime_negative_tests.py:只用 TransPyV 编译并断言编译失败且输出含 LifetimeError(TPC 解析不了 new、也产不出 LifetimeError,故与 NegativeTest 的 TPC 运行器分开);默认跑 EscapeTest / EscapeMethodTest / EscapeXmodTest,支持 --only/--rebuild-includes。
NewTest:按 MemhubTest 的写法补上 new memgr(m) hlife Point(5,6) 段(memhub.MemBuddy(arena, 65536))。README 同步负向运行器用法。
|
2026-10-08 17:50:53 +08:00 |
|
TermiNexus
|
42ca901b28
|
test(new): 新增 NewTest 工程;两个回归脚本支持 --escape/--only 单独跑
NewTest:M2.4 new 描述符冒烟(stack→alloca、heap→malloc;memgr 段待确认管理器 API,非法组合以注释列出)。
regression_test.py / SequentialRegressionTest.py 新增 --escape(只跑生命期/逃逸 + new 相关项目)与 --only(逗号分隔指定项目);两者都会在 Test/<名> 与仓库根 <名> 查找 project.json / project.vpj,故根级 Escape* 项目也能直接跑;--escape 忽略 README 难度顺序。
README.md:新增「一·附 生命期/逃逸相关测试」一节,列出 5 个项目的期望结果与单独运行命令。
|
2026-10-08 17:47:24 +08:00 |
|
TermiNexus
|
f5544eed80
|
chore(syntax): DefineTest/FormatStringTest 迁移到 cif/defined() 条件编译
DefineTest 的条件编译用例(基础/elif-else/cifdef-cifndef/平台宏/嵌套/表达式/跨模块/守卫)全部改写为 cif-celif-celse + defined();FormatStringTest 的 isptr 判断由 c.CIf 改为 cif;README 同步新语法口径。
|
2026-10-07 19:02:56 +08:00 |
|
TermiNexus
|
e9f12973fd
|
docs(Test): 补全测试清单——补录 9 个新增工程与 NegativeTest 负向测试说明
|
2026-10-01 23:42:42 +08:00 |
|
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 |
|