30.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(digit0-9的任意一个)的变种文件。如果其中之一完全符合就认为测试通过, 否则将差异最小的比较输出写入失败报告。如果resultmap包含某个特定测试的项, 那么基准testname就是resultmap中给出的替换名。

例如,对于char测试,比较文件char.out 包含使用CPOSIX区域设置的结果,而char_1.out 文件则包含使用其它区域设置的结果。

最佳匹配机制主要目的是用于匹配区域相关的测试结果,但也可以用于仅凭平台名称难以预计测试结果的场合。 这个机制的一个缺点是测试脚本无法确定当前环境下究竟哪个变种是"确切"的, 它只能选择最贴近的变种。因此最好将这个机制仅仅用于多个变种在所有上下文环境中都可以被认为是等价的场合。