33.3. 变体比较文件

因为某些测试生来就会产生依赖环境的结果,我们提供了方法来指定替代的预期结果文件。每一个回归测试可以有多个比较文件来展示在不同平台上的可能结果。有两种独立的机制来决定为每一个测试使用哪个比较文件。

第一种机制允许为指定平台选择比较文件。这是一个映射文件src/test/regress/resultmap,它定义了为每一个平台使用哪个比较文件。要为一个特定平台消除虚假的测试失败,你可以首先选择或创建一个变体结果文件,然后在resultmap文件中增加一行。

在该映射文件中的每一行的形式为:

testname:output:platformpattern=comparisonfilename

测试名只是该特定回归测试模块的名称。输出值指定要检查哪个输出文件。对于标准回归测试,这总是out。该值对应于输出文件的文件扩展。平台模式是一个 Unix 工具expr风格的模式(即在开头带有一个隐式^锚的正则表达式)。它被与config.guess打印出的平台名称进行匹配。匹配文件名称是替补的结果比较文件的基础名。

例如:某些系统会把非常小的浮点值解释为零,而不是报告一个下溢错误。这在float8回归测试中会导致一些差异。因此,我们提供一个变体比较文件float8-small-is-zero.out,其中包括了在这些系统上的期望结果。要在OpenBSD平台上屏蔽这种虚假的失败消息,resultmap包括:

float8:out:i.86-.*-openbsd=float8-small-is-zero.out

这将在任何config.guess输出匹配i.86-.*-openbsd的机器上触发。resultmap中的其他行为其他平台选择变体比较文件。

第二种变体比较文件的选择机制更加自动:它简单地在多个提供的比较文件中采用最佳匹配。回归测试驱动器脚本对一个测试考虑两种标准比较文件,testname.out以及名为testname_digit.out的变体文件(其中digit是任何单一数字0-9)。如果任一这种文件是一个完全匹配,测试被认为是通过的。否则,产生最短区别的文件被用来创建失败报告(如果resultmap包括特定测试的一个项,那么基础testnameresultmap中给定的替补名称)。

例如,对于char测试,比较文件char.out包含在CPOSIX区域中期望的结果,而文件char_1.out包含在其他很多区域中的排序结果。

最佳匹配机制被设计为与区域依赖的结果协同工作,但是它可以被用在任何测试结果无法只从平台名很容易地预测的情况中。这种机制的一个限制是测试驱动器不能说出哪个变体对当前环境是真正正确的,它将只是选择看起来工作得最好的变体。因此对你认为在所有上下文中具有同等合法性的变体结果使用这种机制才是最安全的。