Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 1337] ファイルの概要

このコミットは、Go言語のテストスイートにおける更新を目的としています。具体的には、以前に報告されたバグ(bug104.go)が修正されたことに伴い、そのテストファイルをbugsディレクトリからfixedbugsディレクトリへ移動しています。また、テストの期待出力が記録されているgolden.outファイルを更新し、修正されたバグに関連するエラーメッセージや、コンパイラのエラーチェックに関する期待値の変更を反映しています。これにより、テストスイートが最新のコンパイラの挙動とバグ修正の状態を正確に反映するように保たれています。

コミット

  • コミットハッシュ: 58a320f926975571d2a9a185e946a709a401ddb7
  • Author: Rob Pike r@golang.org
  • Date: Fri Dec 12 13:29:25 2008 -0800

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/58a320f926975571d2a9a185e946a709a401ddb7

元コミット内容

test update

R=rsc
DELTA=16  (5 added, 10 deleted, 1 changed)
OCL=21085
CL=21087

変更の背景

このコミットの背景には、Go言語の初期開発段階におけるバグ修正とテストインフラの進化があります。bug104.goというファイル名から、これは特定のバグを再現するためのテストケースであったことが推測されます。このテストケースがbugsディレクトリからfixedbugsディレクトリへ移動されたことは、関連するバグが修正され、その修正がテストによって検証されたことを示しています。

また、test/golden.outファイルの変更は、コンパイラのエラー報告の挙動や、特定のコードに対する期待されるエラーメッセージが変更されたことを示唆しています。これは、コンパイラの改善、型システムやリテラル変換に関するバグ修正、あるいはエラーメッセージの明確化といった、Go言語自体の進化に伴うものです。テストスイートは、これらの変更に追従し、常に正確な期待値を反映している必要があります。

前提知識の解説

Go言語のテストディレクトリ構造 (test/bugs, test/fixedbugs)

Go言語の公式リポジトリ(特に初期のコミット)では、テストケースを整理するために特定のディレクトリ構造が用いられていました。

  • test/bugs: これは、まだ修正されていない、または再現が確認されているバグに関連するテストケースを格納するためのディレクトリでした。これらのテストは、バグが修正されるまで失敗することが期待されます。
  • test/fixedbugs: これは、既に修正されたバグに関連するテストケースを格納するためのディレクトリです。これらのテストは、修正が正しく適用されていることを検証するために、成功することが期待されます。

テストファイルがbugsからfixedbugsに移動されることは、そのテストが対象としていたバグが解決されたことを意味します。

golden.outファイルとerrchkテスト

Go言語のテストスイートには、コンパイラのエラーメッセージや特定のツールの出力を検証するためのメカニズムが存在します。

  • golden.out: これは「ゴールデンファイル」の一種で、特定のテストやコンパイラの実行によって生成される期待される出力を記録したファイルです。テスト実行時に生成された実際の出力がgolden.outの内容と一致するかどうかを比較することで、コンパイラの挙動やエラーメッセージの一貫性を検証します。もし不一致があれば、それはバグであるか、golden.outを更新する必要があることを示します。
  • errchk: これは、Goのテストフレームワーク内で使用される可能性のあるディレクティブまたはツールで、特定のコードが期待されるエラーメッセージを生成するかどうかをチェックするために使われます。golden.out内のerrchk行は、どのファイル、どの行で、どのようなエラーメッセージが期待されるかを定義しています。

このコミットでは、golden.outからerrchkメッセージが削除されたり変更されたりしているため、これはコンパイラの挙動が変わり、以前はエラーとされていたものがエラーでなくなったか、エラーメッセージの形式が変わったことを示しています。

convlit.go

convlit.goというファイル名から、これはリテラル(数値、文字列など)の型変換(conversion)に関するテストファイルであると推測されます。Go言語では、異なる型のリテラル間の変換には厳密なルールがあり、オーバーフローや不適合な変換はコンパイルエラーとなります。このテストファイルは、これらの変換ルールが正しく適用されているかを検証するためのものです。

技術的詳細

このコミットの技術的詳細は、Goコンパイラの進化とテストスイートのメンテナンスに集約されます。

  1. bug104.goの移動: test/bugs/bug104.goからtest/fixedbugs/bug104.goへの移動は、単なるファイルパスの変更以上の意味を持ちます。これは、bug104として知られていた問題がGoコンパイラまたはランタイムで修正されたことを公式に宣言するものです。これにより、このテストはもはや「バグを再現する」ためのものではなく、「バグが修正されたことを確認する」ためのものとなります。

  2. test/golden.outの変更: golden.outは、Goコンパイラが特定のテストファイルに対して出力するエラーメッセージや警告、その他の診断情報の「正解」を保持しています。このファイルが変更されたことは、以下のいずれか、または複数の理由によるものです。

    • エラーの解消: errchk: ./convlit.go: missing expected error message on line 17: 'conver|incompatible' のような行が削除されていることから、以前はconvlit.goの特定の行で期待されていたエラーが、コンパイラの修正によって発生しなくなったことを示します。これは、リテラル変換に関するバグが修正された結果である可能性が高いです。
    • エラーメッセージの変更: ./convlit.go:12: overflow converting constant to float./convlit.go:11: fatal error: too many errors に変更されている箇所は、コンパイラがエラーを検出した際のメッセージ形式や、エラー処理のロジック自体が変更されたことを示唆しています。特に「too many errors」というメッセージは、コンパイラが一定数のエラーを検出した後に処理を中断するようになったことを示している可能性があります。
    • テストの期待値の更新: BUG: errchk: command succeeded unexpectedly: 6g bugs/bug104.go の削除は、bug104.goがもはやバグを再現するテストではなくなったため、そのテストが成功することが期待されるようになったことを明確に示しています。以前は、このテストが成功すると「予期せず成功したバグ」として報告されていたものが、バグが修正されたことで、その報告が不要になったわけです。

これらの変更は、Goコンパイラの安定性と正確性を向上させるための継続的な努力の一環であり、テストスイートがその進捗を正確に反映していることを保証します。

コアとなるコードの変更箇所

diff --git a/test/bugs/bug104.go b/test/fixedbugs/bug104.go
similarity index 100%
rename from test/bugs/bug104.go
rename to test/fixedbugs/bug104.go
diff --git a/test/golden.out b/test/golden.out
index 30badd3b14..9821f4ab86 100644
--- a/test/golden.out
+++ b/test/golden.out
@@ -1,8 +1,6 @@
 
 =========== ./convlit.go
 BUG: errchk: ./convlit.go: missing expected error message on line 16: 'conver|incompatible'
-errchk: ./convlit.go: missing expected error message on line 17: 'conver|incompatible'
-errchk: ./convlit.go: missing expected error message on line 18: 'conver|incompatible'
 errchk: ./convlit.go: missing expected error message on line 22: 'convert'
 errchk: ./convlit.go: missing expected error message on line 23: 'overflow'
 errchk: ./convlit.go: missing expected error message on line 24: 'overflow'
@@ -14,7 +12,7 @@ errchk: ./convlit.go: unmatched error messages:
 ./convlit.go:8: cannot convert non-integer constant to int
 ./convlit.go:9: cannot convert non-integer constant to int
 ./convlit.go:11: overflow converting constant to int
-./convlit.go:12: overflow converting constant to float
+./convlit.go:11: fatal error: too many errors
 ==================================================
 
 =========== ./helloworld.go
@@ -123,9 +121,6 @@ bugs/bug098.go:10: illegal types for operand: AS
 	**M
 BUG should compile
 
-=========== bugs/bug104.go
-BUG: errchk: command succeeded unexpectedly:  6g bugs/bug104.go
-
 =========== bugs/bug105.go
 bugs/bug105.go:8: P: undefined
 bugs/bug105.go:8: illegal types for operand: RETURN

コアとなるコードの解説

このコミットは、主に2つのファイルに対する変更を含んでいます。

  1. test/bugs/bug104.go から test/fixedbugs/bug104.go へのリネーム/移動: similarity index 100% が示しているように、ファイルの内容自体は変更されていません。この変更は、bug104.goが対象としていたバグが修正されたことを意味します。これにより、このテストケースはもはや「未修正のバグ」を示すものではなく、「修正済みバグの回帰テスト」として機能するようになります。これは、Go言語のテストスイートがバグのライフサイクルを追跡し、修正が永続的であることを保証するための重要なプラクティスです。

  2. test/golden.out の変更: このファイルは、Goコンパイラが特定のテストファイルに対して出力するエラーメッセージや警告の「正解」を記録しています。

    • - errchk: ./convlit.go: missing expected error message on line 17: 'conver|incompatible'

    • - errchk: ./convlit.go: missing expected error message on line 18: 'conver|incompatible' これらの行の削除は、convlit.goの17行目と18行目で以前は期待されていた「変換不適合」に関するエラーメッセージが、もはや発生しなくなったことを示しています。これは、convlit.goがテストしていたリテラル変換に関するバグが修正されたか、またはコンパイラの型推論や変換ロジックが改善され、これらのケースが合法的な変換として扱われるようになったことを意味します。

    • - ./convlit.go:12: overflow converting constant to float

    • + ./convlit.go:11: fatal error: too many errors この変更は、convlit.goの12行目で以前は「定数をfloatに変換する際のオーバーフロー」というエラーが報告されていたものが、11行目で「致命的なエラー:エラーが多すぎます」というメッセージに変わったことを示しています。これは、コンパイラがエラーを検出した際の挙動が変更されたことを示唆しています。具体的には、コンパイラが一定数のエラーを検出した時点で処理を中断し、それ以上のエラー報告を行わないようになった可能性があります。これにより、コンパイルエラーの出力がより簡潔になる一方で、根本的な問題が早期に特定されるようになります。

    • - =========== bugs/bug104.go

    • - BUG: errchk: command succeeded unexpectedly: 6g bugs/bug104.go これらの行の削除は、bug104.gofixedbugsに移動されたことと直接関連しています。以前は、bug104.goがコンパイルに成功すると、それは「予期せぬ成功」としてバグとして報告されていました(つまり、バグがまだ修正されていないのにテストが成功してしまった)。しかし、バグが修正されたため、このテストが成功することはもはや「予期せぬ」ことではなくなり、このBUGエントリは不要になりました。

これらの変更は、Goコンパイラの継続的な改善と、それに伴うテストスイートの厳密なメンテナンスの証拠です。

関連リンク

このコミットはGo言語の初期のコミットであり、特定のIssueやデザインドキュメントに直接リンクされているわけではありませんが、Go言語のテストインフラストラクチャやコンパイラの進化に関する一般的な情報が関連します。

参考にした情報源リンク

  • Go言語のGitリポジトリのコミット履歴
  • Go言語のテストに関する一般的な知識
  • Gitのdiffコマンドの出力形式に関する知識
  • ゴールデンファイルテストの一般的な概念

[インデックス 1337] ファイルの概要

このコミットは、Go言語のテストスイートにおける更新を目的としています。具体的には、以前に報告されたバグ(bug104.go)が修正されたことに伴い、そのテストファイルをbugsディレクトリからfixedbugsディレクトリへ移動しています。また、テストの期待出力が記録されているgolden.outファイルを更新し、修正されたバグに関連するエラーメッセージや、コンパイラのエラーチェックに関する期待値の変更を反映しています。これにより、テストスイートが最新のコンパイラの挙動とバグ修正の状態を正確に反映するように保たれています。

コミット

  • コミットハッシュ: 58a320f926975571d2a9a185e946a709a401ddb7
  • Author: Rob Pike r@golang.org
  • Date: Fri Dec 12 13:29:25 2008 -0800

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/58a320f926975571d2a9a185e946a709a401ddb7

元コミット内容

test update

R=rsc
DELTA=16  (5 added, 10 deleted, 1 changed)
OCL=21085
CL=21087

変更の背景

このコミットの背景には、Go言語の初期開発段階におけるバグ修正とテストインフラの進化があります。bug104.goというファイル名から、これは特定のバグを再現するためのテストケースであったことが推測されます。このテストケースがbugsディレクトリからfixedbugsディレクトリへ移動されたことは、関連するバグが修正され、その修正がテストによって検証されたことを示しています。

また、test/golden.outファイルの変更は、コンパイラのエラー報告の挙動や、特定のコードに対する期待されるエラーメッセージが変更されたことを示唆しています。これは、コンパイラの改善、型システムやリテラル変換に関するバグ修正、あるいはエラーメッセージの明確化といった、Go言語自体の進化に伴うものです。テストスイートは、これらの変更に追従し、常に正確な期待値を反映している必要があります。

前提知識の解説

Go言語のテストディレクトリ構造 (test/bugs, test/fixedbugs)

Go言語の公式リポジトリ(特に初期のコミット)では、テストケースを整理するために特定のディレクトリ構造が用いられていました。

  • test/bugs: これは、まだ修正されていない、または再現が確認されているバグに関連するテストケースを格納するためのディレクトリでした。これらのテストは、バグが修正されるまで失敗することが期待されます。
  • test/fixedbugs: これは、既に修正されたバグに関連するテストケースを格納するためのディレクトリです。これらのテストは、修正が正しく適用されていることを検証するために、成功することが期待されます。

テストファイルがbugsからfixedbugsに移動されることは、そのテストが対象としていたバグが解決されたことを意味します。Go言語のテスト哲学は、テストファイル(_test.goサフィックスを持つ)をテスト対象のソースコードと同じディレクトリに配置することを推奨しており、go testコマンドが自動的にテストを検出・実行します。このコミットは、Go言語の初期のテスト管理戦略の一端を示しています。

golden.outファイルとerrchkテスト

Go言語のテストスイートには、コンパイラのエラーメッセージや特定のツールの出力を検証するためのメカニズムが存在します。

  • golden.out: これは「ゴールデンファイル」の一種で、特定のテストやコンパイラの実行によって生成される期待される出力を記録したファイルです。テスト実行時に生成された実際の出力がgolden.outの内容と一致するかどうかを比較することで、コンパイラの挙動やエラーメッセージの一貫性を検証します。もし不一致があれば、それはバグであるか、golden.outを更新する必要があることを示します。
  • errchk: これは、Goのテストフレームワーク内で使用される可能性のあるディレクティブまたはツールで、特定のコードが期待されるエラーメッセージを生成するかどうかをチェックするために使われます。golden.out内のerrchk行は、どのファイル、どの行で、どのようなエラーメッセージが期待されるかを定義しています。

このコミットでは、golden.outからerrchkメッセージが削除されたり変更されたりしているため、これはコンパイラの挙動が変わり、以前はエラーとされていたものがエラーでなくなったか、エラーメッセージの形式が変わったことを示しています。

convlit.go

convlit.goというファイル名から、これはリテラル(数値、文字列など)の型変換(conversion)に関するテストファイルであると推測されます。Go言語では、異なる型のリテラル間の変換には厳密なルールがあり、オーバーフローや不適合な変換はコンパイルエラーとなります。このテストファイルは、これらの変換ルールが正しく適用されているかを検証するためのものです。

技術的詳細

このコミットの技術的詳細は、Goコンパイラの進化とテストスイートのメンテナンスに集約されます。

  1. bug104.goの移動: test/bugs/bug104.goからtest/fixedbugs/bug104.goへの移動は、単なるファイルパスの変更以上の意味を持ちます。これは、bug104として知られていた問題がGoコンパイラまたはランタイムで修正されたことを公式に宣言するものです。これにより、このテストはもはや「バグを再現する」ためのものではなく、「バグが修正されたことを確認する」ためのものとなります。

  2. test/golden.outの変更: golden.outは、Goコンパイラが特定のテストファイルに対して出力するエラーメッセージや警告、その他の診断情報の「正解」を保持しています。このファイルが変更されたことは、以下のいずれか、または複数の理由によるものです。

    • エラーの解消: errchk: ./convlit.go: missing expected error message on line 17: 'conver|incompatible' のような行が削除されていることから、以前はconvlit.goの特定の行で期待されていたエラーが、コンパイラの修正によって発生しなくなったことを示します。これは、リテラル変換に関するバグが修正された結果である可能性が高いです。
    • エラーメッセージの変更: ./convlit.go:12: overflow converting constant to float./convlit.go:11: fatal error: too many errors に変更されている箇所は、コンパイラがエラーを検出した際のメッセージ形式や、エラー処理のロジック自体が変更されたことを示唆しています。特に「too many errors」というメッセージは、コンパイラが一定数のエラーを検出した後に処理を中断するようになったことを示している可能性があります。
    • テストの期待値の更新: BUG: errchk: command succeeded unexpectedly: 6g bugs/bug104.go の削除は、bug104.goがもはやバグを再現するテストではなくなったため、そのテストが成功することが期待されるようになったことを明確に示しています。以前は、このテストが成功すると「予期せず成功したバグ」として報告されていたものが、バグが修正されたことで、その報告が不要になったわけです。

これらの変更は、Goコンパイラの安定性と正確性を向上させるための継続的な努力の一環であり、テストスイートがその進捗を正確に反映していることを保証します。

コアとなるコードの変更箇所

diff --git a/test/bugs/bug104.go b/test/fixedbugs/bug104.go
similarity index 100%
rename from test/bugs/bug104.go
rename to test/fixedbugs/bug104.go
diff --git a/test/golden.out b/test/golden.out
index 30badd3b14..9821f4ab86 100644
--- a/test/golden.out
+++ b/test/golden.out
@@ -1,8 +1,6 @@
 
 =========== ./convlit.go
 BUG: errchk: ./convlit.go: missing expected error message on line 16: 'conver|incompatible'
-errchk: ./convlit.go: missing expected error message on line 17: 'conver|incompatible'
-errchk: ./convlit.go: missing expected error message on line 18: 'conver|incompatible'
 errchk: ./convlit.go: missing expected error message on line 22: 'convert'
 errchk: ./convlit.go: missing expected error message on line 23: 'overflow'
 errchk: ./convlit.go: missing expected error message on line 24: 'overflow'
@@ -14,7 +12,7 @@ errchk: ./convlit.go: unmatched error messages:
 ./convlit.go:8: cannot convert non-integer constant to int
 ./convlit.go:9: cannot convert non-integer constant to int
 ./convlit.go:11: overflow converting constant to int
-./convlit.go:12: overflow converting constant to float
+./convlit.go:11: fatal error: too many errors
 ==================================================
 
 =========== ./helloworld.go
@@ -123,9 +121,6 @@ bugs/bug098.go:10: illegal types for operand: AS
 	**M
 BUG should compile
 
-=========== bugs/bug104.go
-BUG: errchk: command succeeded unexpectedly:  6g bugs/bug104.go
-
 =========== bugs/bug105.go
 bugs/bug105.go:8: P: undefined
 bugs/bug105.go:8: illegal types for operand: RETURN

コアとなるコードの解説

このコミットは、主に2つのファイルに対する変更を含んでいます。

  1. test/bugs/bug104.go から test/fixedbugs/bug104.go へのリネーム/移動: similarity index 100% が示しているように、ファイルの内容自体は変更されていません。この変更は、bug104.goが対象としていたバグが修正されたことを意味します。これにより、このテストケースはもはや「未修正のバグ」を示すものではなく、「修正済みバグの回帰テスト」として機能するようになります。これは、Go言語のテストスイートがバグのライフサイクルを追跡し、修正が永続的であることを保証するための重要なプラクティスです。

  2. test/golden.out の変更: このファイルは、Goコンパイラが特定のテストファイルに対して出力するエラーメッセージや警告の「正解」を記録しています。

    • - errchk: ./convlit.go: missing expected error message on line 17: 'conver|incompatible'

    • - errchk: ./convlit.go: missing expected error message on line 18: 'conver|incompatible' これらの行の削除は、convlit.goの17行目と18行目で以前は期待されていた「変換不適合」に関するエラーメッセージが、もはや発生しなくなったことを示しています。これは、convlit.goがテストしていたリテラル変換に関するバグが修正されたか、またはコンパイラの型推論や変換ロジックが改善され、これらのケースが合法的な変換として扱われるようになったことを意味します。

    • - ./convlit.go:12: overflow converting constant to float

    • + ./convlit.go:11: fatal error: too many errors この変更は、convlit.goの12行目で以前は「定数をfloatに変換する際のオーバーフロー」というエラーが報告されていたものが、11行目で「致命的なエラー:エラーが多すぎます」というメッセージに変わったことを示しています。これは、コンパイラがエラーを検出した際の挙動が変更されたことを示唆しています。具体的には、コンパイラが一定数のエラーを検出した時点で処理を中断し、それ以上のエラー報告を行わないようになった可能性があります。これにより、コンパイルエラーの出力がより簡潔になる一方で、根本的な問題が早期に特定されるようになります。

    • - =========== bugs/bug104.go

    • - BUG: errchk: command succeeded unexpectedly: 6g bugs/bug104.go これらの行の削除は、bug104.gofixedbugsに移動されたことと直接関連しています。以前は、bug104.goがコンパイルに成功すると、それは「予期せぬ成功」としてバグとして報告されていました(つまり、バグがまだ修正されていないのにテストが成功してしまった)。しかし、バグが修正されたため、このテストが成功することはもはや「予期せぬ」ことではなくなり、このBUGエントリは不要になりました。

これらの変更は、Goコンパイラの継続的な改善と、それに伴うテストスイートの厳密なメンテナンスの証拠です。

関連リンク

このコミットはGo言語の初期のコミットであり、特定のIssueやデザインドキュメントに直接リンクされているわけではありませんが、Go言語のテストインフラストラクチャやコンパイラの進化に関する一般的な情報が関連します。

参考にした情報源リンク

  • Go言語のGitリポジトリのコミット履歴
  • Go言語のテストに関する一般的な知識
  • Gitのdiffコマンドの出力形式に関する知識
  • ゴールデンファイルテストの一般的な概念
  • Web検索: "Go language early development test directory structure bugs fixedbugs"