mpfr_expr_cli 设计

设计目标

用一条命令通过 frontend/mpfr_expr 运行一个 MPFR 参考文件,使二进制符合性工具无需了解三种文件格式,就能在 TestFloat 矩阵旁边加入 MPFR 证据。

数学背景

每一行断言 y^=∘p,ρ(f(x))\hat y = \circ_{p,\rho}(f(x))(以及标志),如 mpfr_expr 设计所述。运行器不对语义作任何增补;其汇总就是整个文件的前端汇总。

设计决策

根据内容检测格式

这些格式没有共同的文件头,因此运行器会查找标记:初等函数生成器写入 mpfr-elementary-v1,幂函数数据有一个包含 input_coefficient_hex 的文件头,而 MPFR 自带的 tests/data/sqrt 两者都没有。基于内容的检测使固定版本的上游文件可以原样使用。

不分片

MPFR 文件至多只有几千行;调用 parse_common_options 时传入 allow_shard=false,使分片选项被拒绝,而不是被静默忽略。

JSON 中的语料名称

JSON 的 corpus 字段给出检测到的格式以及生成数据所用的 MPFR 版本,使汇总报告能说明其证据来源。

正确性 / 不变式

  • 每次调用恰好运行一个解析器,由文件内容决定。
  • 当且仅当每一行都通过时退出码为 0;totalCases = passedCases + failedCases。
  • 解析错误会在执行任何行之前以 2 退出。

被否决的替代方案

  • --format 选项。 与数据中已有的标记重复,且会成为不一致的来源。
  • 接受多个文件。 各文件的格式不同;每个进程处理一个文件可使报告没有歧义。

边界

  • 不分片,也不过滤行。
  • 仅支持 frontend/mpfr_expr 的三种格式。