Files
Viper_RegressionTesting/DocTest/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

70 lines
2.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import t
import stdio
import string
import c
import testcheck
import remote
# 同模块函数(有 docstring)
def local_func() -> int:
"Local function docstring."
return 0
# 同模块函数(无 docstring)
def no_doc_func() -> int:
return 0
# 同模块类(有 docstring)
class LocalClass:
"Local class docstring."
value: t.CInt
def local_method(self) -> int:
"Local method docstring."
return 0
def _check_doc_adaptive(name: str, doc: str, expected: str):
"""自适应检查 docstring:非空时验证匹配,空时视为优化剥离"""
if doc is None:
testcheck.ok(f"{name}: __doc__ optimized out (null)")
return
if string.strcmp(doc, expected) == 0:
testcheck.ok(f"{name}: __doc__ matches")
else:
testcheck.fail(f"{name}: __doc__ mismatch (got '{doc}', expected '{expected}')")
def _check_doc_null(name: str, doc: str):
"""检查 docstring 为 null(无 docstring 的符号)"""
if doc is None:
testcheck.ok(f"{name}: __doc__ is null")
else:
testcheck.fail(f"{name}: __doc__ should be null but got '{doc}'")
def test_local_doc():
testcheck.section("Local __doc__")
_check_doc_adaptive("local_func", local_func.__doc__, "Local function docstring.")
_check_doc_adaptive("LocalClass", LocalClass.__doc__, "Local class docstring.")
_check_doc_adaptive("LocalClass.local_method", LocalClass.local_method.__doc__, "Local method docstring.")
_check_doc_null("no_doc_func", no_doc_func.__doc__)
def test_cross_module_doc():
testcheck.section("Cross-module __doc__")
_check_doc_adaptive("remote.remote_func", remote.remote_func.__doc__, "Remote function docstring.")
_check_doc_adaptive("remote.RemoteClass", remote.RemoteClass.__doc__, "Remote class docstring.")
_check_doc_adaptive("remote.RemoteClass.remote_method", remote.RemoteClass.remote_method.__doc__, "Remote method docstring.")
_check_doc_null("remote.no_doc_func", remote.no_doc_func.__doc__)
def main() -> t.CInt:
testcheck.begin("DocTest: __doc__ magic string test")
test_local_doc()
test_cross_module_doc()
return testcheck.end()