28.3. 各種の比較用ファイル

試験の中には必然的に環境に依存した結果となるものがありますので、"想定"結果ファイルの代替を指定する方法を用意しています。 各リグレッション試験は、異なるプラットフォームで出力される可能性がある、複数の比較用ファイルを持つことができます。 各試験に対してどの比較用ファイルを使用するかを決定する方法には、独立した2つの機構があります。

1つ目の機構により、指定したプラットフォーム用に比較用ファイルを選ぶことができます。 関連付けを行うsrc/test/regress/resultmapというファイルがあり、どの比較用ファイルがどのプラットフォームで使用するかを定義します。 プラットフォーム独特の試験の"失敗"の誤検知を防ぐために、まず結果ファイルを選ぶ、あるいは、作成し、そして、 resultmapファイルに1行加えてください。

マッピングファイルの各行の書式は下記の通りです。

testname/platformpattern=comparisonfilename

testnameとは、単に特定のリグレッションテストのモジュール名です。 platformpatternとは、expr Unixツールスタイル(最初に暗黙的な^がある正規表現)のパターンです。 これは、config.guessによって出力されるプラットフォーム名と比較されます comparisonfilenameは置き換える結果比較ファイルの(ディレクトリ部分を除いた)名前です。

以下に例を示します。 システムの中には、非常に小さな浮動小数値に対し、アンダーフローエラーを報告せずに0として解釈するものがあります。 これにより、 horologyリグレッションテストにわずかな違いが発生します。 そのため、float8-small-is-zero.outという変形比較ファイルを用意し、そこにこういったシステムでの期待値を記述します。 OpenBSDプラットフォームにおいて偽の"失敗"メッセージ出力を行わせないようにするために、resultmapに以下を含めます。

float8/i.86-.*-openbsd=float8-small-is-zero

これは、config.guessの出力がi.86-.*-openbsdに一致する全てのマシンに対して適用されます。 resultmapのこの他の行は、適切な他のプラットフォーム用の変形比較ファイルを選択します。

2つ目の比較用ファイルの選択機構は、かなり自動化されています。 これは、単に、提供される各種比較用ファイルの中から"もっとも一致するもの"を使用します。 リグレッション試験のドライバスクリプトは、ある試験用に標準比較用ファイルtestname.outと、testname_digit.out(ここでdigit0-9のいずれかからなる1つの数字です)という名前の変種ファイルを考慮します。 もしこの中のいずれかのファイルが正確に一致した場合、試験が成功したものとみなします。 さもなくば、diffの結果がもっとも小さかったものを使用して、失敗報告を生成します。 (resultmapに特定の試験用の項目が含まれていると、resultmap内の名前が元となるtestnameに置き換えられます。)

例えば、char試験では、比較用ファイルchar.outにはCロケールとPOSIXロケールで想定される結果が含まれています。 一方char_1.outファイルには、他の多くのロケールで現れる結果がソートされて含まれています。

この最善一致の機構は、ロケールに依存した結果に対応できるよう案出されました。 しかし、この機構はプラットフォームの名前だけでは簡単に予測できない試験結果となるような任意の状況で使用することができます。 この機構の制限は、試験ドライバが、現在の環境でどの種類が本当に"正しい"のかが分からないという点です。 単にもっともうまくいきそうな種類を選択しているだけです。 従って、すべての文脈で平等に有効とみなすことができるような種類の結果でのみ、安全にこの機構を使用できます。