他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

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

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

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

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

testname:output:platformpattern=comparisonfilename

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

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

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

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

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

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

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