由于某些测试本质上会产生依赖于环境的结果,因此我们提供了指定备用 “预期” 结果文件的方法。每个回归测试可以有几个比较文件,显示在不同平台上的可能结果。有两种独立的机制来确定为每个测试使用哪个比较文件。
第一个机制允许为特定平台选择比较文件。有一个映射文件 src/test/regress/resultmap,它定义了针对每个平台使用哪个比较文件。要消除特定平台的虚假测试 “失败”,首先选择或制作一个变体结果文件,然后向 resultmap 文件添加一行。
映射文件中的每一行都采用以下形式
testname:output:platformpattern=comparisonfilename
测试名称只是特定回归测试模块的名称。输出值指示要检查哪个输出文件。对于标准回归测试,这始终是 out。该值对应于输出文件的扩展名。平台模式是 Unix 工具 expr 样式的模式(即,一个正则表达式,在开头有一个隐式的 ^ 锚点)。它与 config.guess 打印的平台名称相匹配。比较文件名是替代结果比较文件的基名。
例如:某些系统缺少一个可用的 strtof 函数,而我们的解决方法会导致 float4 回归测试中出现舍入误差。因此,我们提供了一个变体比较文件 float4-misrounded-input.out,其中包括在这些系统上预期的结果。为了在 Cygwin 平台上消除虚假的 “失败” 消息,resultmap 包括
float4:out:.*-.*-cygwin.*=float4-misrounded-input.out
它将在 config.guess 的输出与 .*-.*-cygwin.* 匹配的任何机器上触发。resultmap 中的其他行会为其他合适的平台选择变体比较文件。
变体比较文件的第二个选择机制更加自动:它只是使用几个提供的比较文件中的 “最佳匹配”。回归测试驱动程序脚本同时考虑测试的标准比较文件 和名为 testname.out 的变体文件(其中 testname_digit.outdigit 是任何单个数字 0-9)。如果任何此类文件完全匹配,则认为测试通过;否则,使用生成最短差异的文件来创建失败报告。(如果 resultmap 包含特定测试的条目,则基础 testname 是 resultmap 中给出的替代名称。)
例如,对于 char 测试,比较文件 char.out 包含在 C 和 POSIX 本地中预期的结果,而文件 char_1.out 包含按许多其他本地中出现的顺序排序的结果。
最佳匹配机制的设计目的是应对依赖于本地的结果,但它可以在任何情况下使用,而不仅仅是无法根据平台名称轻松预测测试结果的情况。此机制的一个限制是测试驱动程序无法判断哪个变体实际上对当前环境是 “正确的”;它只会选择看起来效果最好的变体。因此,最安全的做法是仅将此机制用于您愿意在所有上下文中都认为同样有效的变体结果。
如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用 此表单 报告文档问题。