由于某些测试本质上会产生依赖于环境的结果,因此我们提供了指定备用 “预期” 结果文件的方法。每个回归测试可以有几个比较文件,显示在不同平台上的可能结果。有两种独立的机制来确定为每个测试使用哪个比较文件。
第一个机制允许为特定平台选择比较文件。有一个映射文件 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
包含按许多其他本地中出现的顺序排序的结果。
最佳匹配机制的设计目的是应对依赖于本地的结果,但它可以在任何情况下使用,而不仅仅是无法根据平台名称轻松预测测试结果的情况。此机制的一个限制是测试驱动程序无法判断哪个变体实际上对当前环境是 “正确的”;它只会选择看起来效果最好的变体。因此,最安全的做法是仅将此机制用于您愿意在所有上下文中都认为同样有效的变体结果。