32.3. 变体比较文件

由于某些测试固有地会产生与环境有关的结果,因此我们提供了指定备用“预期”结果文件的方法。每个回归测试可以具有几个比较文件,这些文件显示在不同平台上可能的结果。有两种独立的机制来确定每个测试使用哪个比较文件。

第一种机制允许为特定平台选择比较文件。有一个 Map 文件src/test/regress/resultmap,用于定义每个平台要使用的比较文件。要消除特定平台的虚假测试“失败”,您首先选择或制作一个变体结果文件,然后在resultmap文件中添加一行。

Map 文件中的每一行都是以下格式:

testname:output:platformpattern=comparisonfilename

测试名称只是特定回归测试模块的名称。输出值指示要检查的输出文件。对于标准回归测试,该值始终为out。该值对应于输出文件的文件 extensions。平台模式是 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包括特定测试的条目,则基本 testname *是resultmap中给出的替代名称.)

例如,对于char测试,比较文件char.out包含在CPOSIX语言环境中预期的结果,而文件char_1.out包含在许多其他语言环境中出现的结果进行排序。

设计了最佳匹配机制来处理与语言环境相关的结果,但是它可以用于无法仅凭平台名称轻松预测测试结果的任何情况。这种机制的局限性在于,测试驱动程序无法确定哪个变体对于当前环境实际上是“正确的”。它只会选择效果最好的变体。因此,仅将这种机制用于您希望在所有情况下都同样有效的变体结果,这是最安全的。