因为一些测试天生会产生平台相关的结果,我们提供了明确指定与该平台相关的比较文件的方法。每个回归测试都可以有针对不同平台的多个比较文件。有两个独立的机制可以用于确定究竟应该使用哪个比较文件。
第一个机制是根据特定的平台选择比较文件。通过一个映射文件 src/test/regress/resultmap 定义每个平台使用的比较文件。要消除某特定平台的虚假的测试"失败",可以先选择或创建一个结果文件的变种,然后在 resultmap 文件中添加一行指定映射关系即可。
映射文件里的每行都是如下形式
testname/platformpattern=comparisonfilename
测试名称只是特定回归测试模块的名称。平台名称模式是 Unix 工具 expr 风格的模式(一个开头带有隐含 ^ 锚符号的正则表达式)。它与 config.guess 打印出来的平台名匹配。比较文件名是替换结果比较文件的基本名。
比如:一些系统把很小的浮点数解析成为零,而不是报告一个下溢的错误。这会导致在 float8 回归测试中的一些差别。因此,我们提供了一个比较文件的变种 float8-small-is-zero.out ,它包含在这些平台上的预期结果。要在 OpenBSD 平台上消除这些虚假的"错误"信息,可以在 resultmap 中包含
float8/i.86-.*-openbsd=float8-small-is-zero
它将在那些 config.guess 的输出匹配 i.86-.*-openbsd 的任何机器上触发。在 resultmap 里的其它行同样为其它合适的平台选取相应的比较文件变种。
第二个选择比较文件的机制更加自动化。它简单的在多个比较文件中使用"最佳匹配"。回归测试的驱动脚本同时考虑标准比较文件、testname.out 、以及名为 testname_digit.out(digit 取值范围是 0-9)的变种。如果其中之一完全符合就认为测试通过,否则将差异最小的比较输出写入失败报告。如果 resultmap 某个特定测试的项,那么基准 testname 就是 resultmap 中给出的替换名。
例如,对于 char 测试,比较文件 char.out 包含使用 C 和 POSIX 区域设置的结果,而 char_1.out 文件则包含使用其它区域设置的结果。
最佳匹配机制主要目的是用于匹配区域相关的测试结果,但也可以用于仅凭平台名称难以预计测试结果的场合。这个机制的一个缺点是测试脚本无法确定当前环境下究竟哪个变种是"确切"的,它只能选择最贴近的变种。因此最好将这个机制仅仅用于多个变种在所有上下文环境中都可以被认为是等价的场合。