gda_expr_cli 设计
设计目标
为 frontend/gda_expr 提供一个精简、可脚本化的进程接口:读取文件、透传选项、打印可由 Python 工具跨分片累加的计数器,并将判定结果编码到退出状态中。
数学背景
一次运行是复合 。行的选择以及计数器在分片上的可加性已在 gda_expr 设计和 internal/conformance 设计中证明;本运行器只增加了确定性的文件顺序,使行序号有明确定义。
设计决策
所有文件构成一次运行
分片应用于所有文件拼接并过滤后的行,而不是按文件进行。因此工具可以给每个分片相同的文件列表,即使某个文件占据了语料的大部分,也能得到均衡的分片。
在进程边界处严格化
--strict-supported 在这里求值:当汇总中有失败的行,或者在严格模式下有任何 legacy 或 unsupported 行时,退出状态为 1。前端的汇总本身保持中立,因此进程内调用者可以应用自己的策略。
稳定的 JSON 键
JSON 对象使用固定的 camelCase 键,并将执行计数器与分片一起放在嵌套的 execution 对象中,与 tools/run_dectest_interpreter.py 所汇总的内容一致。supportedCases 是可执行行的数量。
在第一个解析错误处停止
语料是固定版本的,并且应当能完整解析;解析错误是基础设施故障(退出码 2),会连同其位置一起报告,而不是测试结果。
正确性 / 不变式
- 退出码
0意味着failed_cases() == 0,在严格模式下还意味着没有 legacy 或 unsupported 行。 - 对于固定的参数向量和文件内容,输出是确定的。
totalCases在一次运行的每个分片中都相同,因此汇总总数是这个共同值,而不是其和。
被否决的替代方案
- 按文件分片。 不均衡:一个大文件就会决定总耗时。
- 报告每个解析诊断。 在编辑语料时有用,但本运行器面向固定版本的语料;前端 API 会为需要的工具返回所有诊断。
边界
- 不负责语料下载或阶段规划(由 Python 工具负责)。
- 不递归进入子目录。
- 仅通过
decimal_gda支持 GDA.decTest语义;IEEE 十进制测试向量使用另一个运行器。