由于一些测试本身会产生依赖于环境的结果,因此我们提供了一些指定备用“预期”结果文件的方法。每个回归测试都会有几个比较文件,显示在不同平台上可能出现的各种结果。有两种独立的机制可用于确定针对每项测试使用的比较文件。
第一种机制允许针对特定平台选择比较文件。有一个映射文件,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
)。如果任一此类文件完全匹配,则认为测试通过;否则,会使用能够生成最短 diff 的文件来创建失败报告。(如果 resultmap
包含一项特定测试的条目,那么 resultmap
中给出的基准 testname
是替代名称。)
例如,对于char
测试,比较文件char.out
包含C
和POSIX
语言环境中预期的结果,而文件char_1.out
包含按照许多其他语言环境中的结果分类的结果。
最佳匹配机制的设计目的在于应对依赖于语言环境的结果,但它可以在任何情况下使用,只要平台名称本身无法轻松预测测试结果。此机制的一个局限在于测试驱动程序无法判断对于当前环境而言哪种变体实际上是“正确的”;它只会选择看起来运行效果最佳的变体。因此,最安全的做法仅在对于所有语境均愿意视为同样有效的变体结果中使用此机制。