Files
Viper_RegressionTesting/ShortCircuitTest/App/main.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

123 lines
4.4 KiB
Plaintext

from stdint import *
import w32.win32console
import t, c
from t import CInt, CExport
import stdio
import stdlib
import string
import testcheck
# 副作用函数:将 buf[0] 置为 1,返回 True
def bump_true(buf: bytes) -> bool:
buf[0] = 1
return True
# 副作用函数:将 buf[0] 置为 1,返回 False
def bump_false(buf: bytes) -> bool:
buf[0] = 1
return False
def main() -> CInt | CExport:
w32.win32console.SetConsoleCP(65001)
w32.win32console.SetConsoleOutputCP(65001)
testcheck.begin("if 短路机制测试")
buf: bytes = stdlib.malloc(1)
# === Test 1: False and bump_true() - bump 不应被调用 ===
testcheck.section("Test 1: False and bump_true()")
buf[0] = 0
r1: bool = False and bump_true(buf)
testcheck.check(buf[0] == 0, "and short-circuit OK (bump not called)", "and short-circuit FAILED (bump called)")
# === Test 2: True or bump_true() - bump 不应被调用 ===
testcheck.section("Test 2: True or bump_true()")
buf[0] = 0
r2: bool = True or bump_true(buf)
testcheck.check(buf[0] == 0, "or short-circuit OK (bump not called)", "or short-circuit FAILED (bump called)")
# === Test 3: True and bump_true() - bump 应被调用 ===
testcheck.section("Test 3: True and bump_true()")
buf[0] = 0
r3: bool = True and bump_true(buf)
testcheck.check(buf[0] == 1, "and eval OK (bump called)", "and eval FAILED (bump not called)")
# === Test 4: False or bump_true() - bump 应被调用 ===
testcheck.section("Test 4: False or bump_true()")
buf[0] = 0
r4: bool = False or bump_true(buf)
testcheck.check(buf[0] == 1, "or eval OK (bump called)", "or eval FAILED (bump not called)")
# === Test 5: if 语句中的短路 ===
testcheck.section("Test 5: if 语句中的短路")
buf[0] = 0
if False and bump_true(buf):
testcheck.check(False, "should not enter if", "if False and entered")
testcheck.check(buf[0] == 0, "if and short-circuit OK", "if and short-circuit FAILED")
buf[0] = 0
if True or bump_true(buf):
testcheck.check(True, "if True or entered OK", "if True or not entered")
else:
testcheck.check(False, "should enter if", "if True or else")
testcheck.check(buf[0] == 0, "if or short-circuit OK", "if or short-circuit FAILED")
# === Test 6: 嵌套短路 ===
testcheck.section("Test 6: 嵌套短路")
buf[0] = 0
r6: bool = False and (True or bump_true(buf))
testcheck.check(buf[0] == 0, "nested and short-circuit OK", "nested and short-circuit FAILED")
buf[0] = 0
r7: bool = True or (False and bump_true(buf))
testcheck.check(buf[0] == 0, "nested or short-circuit OK", "nested or short-circuit FAILED")
# === Test 7: not 与短路 ===
testcheck.section("Test 7: not 与短路")
buf[0] = 0
r8: bool = not False and bump_true(buf)
testcheck.check(buf[0] == 1, "not and eval OK (bump called)", "not and eval FAILED (bump not called)")
buf[0] = 0
r9: bool = not True or bump_true(buf)
testcheck.check(buf[0] == 1, "not or eval OK (bump called)", "not or eval FAILED (bump not called)")
# === Test 8: and 链中第一个为 False,后续不评估 ===
testcheck.section("Test 8: and 链短路")
buf[0] = 0
r10: bool = False and bump_true(buf) and bump_true(buf)
testcheck.check(buf[0] == 0, "and chain short-circuit OK", "and chain short-circuit FAILED")
# === Test 9: or 链中第一个为 True,后续不评估 ===
testcheck.section("Test 9: or 链短路")
buf[0] = 0
r11: bool = True or bump_true(buf) or bump_true(buf)
testcheck.check(buf[0] == 0, "or chain short-circuit OK", "or chain short-circuit FAILED")
# === Test 10: and 返回值正确性 ===
testcheck.section("Test 10: and 返回值正确性")
buf[0] = 0
r12: bool = True and bump_true(buf)
testcheck.check(r12, "and return True OK", "and return True FAILED")
buf[0] = 0
r13: bool = True and bump_false(buf)
testcheck.check(not r13, "and return False OK", "and return False FAILED")
# === Test 11: or 返回值正确性 ===
testcheck.section("Test 11: or 返回值正确性")
buf[0] = 0
r14: bool = False or bump_true(buf)
testcheck.check(r14, "or return True OK", "or return True FAILED")
buf[0] = 0
r15: bool = False or bump_false(buf)
testcheck.check(not r15, "or return False OK", "or return False FAILED")
stdlib.free(buf)
return testcheck.end()