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

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

このコミットは、Go言語のリポジトリにおけるテスト関連ファイルの変更です。具体的には、test/bignum_test.gotest/golden.out の2つのファイルが修正されています。

  • test/bignum_test.go: Go言語の大きな数値(bignum)に関するテストコードが含まれています。
  • test/golden.out: テストの期待される出力(ゴールデンファイル)を記録しているファイルです。

コミット

  • コミットハッシュ: 02f718339b495210e8b9b5ed33ca3de6cc763c92
  • 作者: Rob Pike r@golang.org
  • コミット日時: 2008年11月4日 火曜日 14:33:47 -0800
  • 変更ファイル数: 2
  • 削除行数: 5

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

https://github.com/golang/go/commit/02f718339b495210e8b9b5ed33ca3de6cc763c92

元コミット内容

update golden.out

R=rsc
OCL=18482
CL=18484

変更の背景

このコミットの主な目的は、golden.out ファイルを更新することです。golden.out は、Go言語のテストスイートにおいて、特定のテストの期待される出力を記録する「ゴールデンファイル」として機能します。テストの実行結果がこのゴールデンファイルの内容と一致するかどうかを比較することで、テストの合否を判定します。

今回の変更は、test/bignum_test.go から print("PASSED\\n"); という行が削除されたことと、test/golden.out から =========== ./method2.go とそれに続くエラーチェックに関する行が削除されたことに関連しています。これは、テストの出力形式の変更、または特定のテストケースの削除/修正に伴い、期待される出力も更新する必要が生じたためと考えられます。特に、BUG: errchk: command succeeded unexpectedly という行の削除は、以前存在した特定のバグチェックが不要になったか、そのテスト方法が変更されたことを示唆しています。

前提知識の解説

ゴールデンファイルテスト

ゴールデンファイルテスト(またはスナップショットテスト)は、プログラムの出力が時間の経過とともに変化しないことを保証するためのテスト手法です。テストの初回実行時に、プログラムの出力(テキスト、画像、JSONなど)を「ゴールデンファイル」として保存します。その後のテスト実行では、現在の出力とゴールデンファイルの内容を比較し、両者が完全に一致すればテストは成功とみなされます。不一致があった場合は、出力が意図せず変更されたことを示し、開発者はその変更が意図的なものか、バグによるものかを判断します。意図的な変更であれば、ゴールデンファイルを更新します。

Go言語の初期のテストフレームワーク

このコミットが作成された2008年時点では、Go言語はまだ開発の初期段階にありました。現在のGo言語の標準テストパッケージ testing が確立される前であり、テストの実行方法や結果の検証方法も現在とは異なるアプローチが取られていた可能性があります。print("PASSED\\n"); のような直接的な出力は、初期のテストスクリプトやテストハーネスがその出力を解析してテストの成功を判断していたことを示唆しています。golden.out のようなファイルは、このような初期のテストシステムにおける期待値の管理に用いられていたと考えられます。

bignum パッケージ

bignum は "big number" の略で、通常の整数型(int, int64など)では表現できない非常に大きな数値を扱うための概念です。Go言語には標準ライブラリとして math/big パッケージがあり、任意精度の整数(Int)、有理数(Rat)、浮動小数点数(Float)を扱うことができます。test/bignum_test.go は、これらの大きな数値演算が正しく機能するかを検証するためのテストコードです。

技術的詳細

test/bignum_test.go の変更

削除された print("PASSED\\n"); は、main 関数内でテストが完了したことを示すための文字列出力でした。これは、テストランナーがこの文字列を検出することで、テストが正常に終了したと判断するような、シンプルなテスト実行環境で用いられていた可能性があります。現在のGoのテストフレームワークでは、テスト関数がエラーを返さずに終了すれば成功とみなされ、このような明示的な成功メッセージの出力は不要です。この行の削除は、テストフレームワークの進化、またはテスト結果の報告方法の変更を示唆しています。

test/golden.out の変更

test/golden.out から削除された以下の行は、特定のテストケース method2.go の出力に関するものでした。

=========== ./method2.go
BUG: errchk: command succeeded unexpectedly:  6g ./method2.go
  • =========== ./method2.go: これは、method2.go というファイルに関連するテスト出力のセクションの開始を示すマーカーです。
  • BUG: errchk: command succeeded unexpectedly: 6g ./method2.go: この行は、6g ./method2.go というコマンド(Goの初期のコンパイラである 6g を使って method2.go をコンパイルするコマンド)が、予期せず成功したことを示すバグチェックメッセージです。これは、本来コンパイルエラーになるべきコードが誤ってコンパイルできてしまった、あるいは特定の条件下でコンパイルが失敗するはずが成功してしまった、といった状況を検出するためのテストだったと考えられます。

この行が golden.out から削除されたということは、以下のいずれかの理由が考えられます。

  1. バグの修正: method2.go に関連するバグが修正され、この「予期せぬ成功」がもはや発生しなくなったため、このチェックが不要になった。
  2. テストの変更/削除: method2.go のテストケース自体が変更されたか、完全に削除されたため、その出力に関するゴールデンファイルのエントリも不要になった。
  3. テスト方法の変更: この種のバグチェックが、golden.out を介した出力比較ではなく、より洗練されたGoのテストフレームワークの機能(例: go test のエラーハンドリング)によって行われるようになった。

2008年というGo言語の非常に初期の段階であることを考慮すると、開発プロセスにおけるテストの試行錯誤や、コンパイラの安定化に伴うテスト内容の調整の一環である可能性が高いです。

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

test/bignum_test.go

--- a/test/bignum_test.go
+++ b/test/bignum_test.go
@@ -491,6 +491,4 @@ func main() {
 	// Rationals
 	// TODO add more tests
 	RatConv();
-\n-\tprint(\"PASSED\\n\");
 }\

test/golden.out

--- a/test/golden.out
+++ b/test/golden.out
@@ -37,9 +37,6 @@ Faulting address: 0x0
 pc: xxx


-=========== ./method2.go
-BUG: errchk: command succeeded unexpectedly:  6g ./method2.go
-
 =========== ./peano.go
 0! = 1
 1! = 1

コアとなるコードの解説

test/bignum_test.go の変更の解説

削除された print("PASSED\\n"); は、main 関数内で実行されるテストスイートの最後に、テストが成功したことを示すメッセージを出力するためのものです。Go言語の初期のテストハーネスが、この特定の文字列を標準出力から読み取ることで、テストの成功を判断していた可能性があります。この行の削除は、テストの成功判定ロジックがより洗練された方法(例えば、関数の戻り値やエラーの有無)に移行したことを示唆しています。

test/golden.out の変更の解説

test/golden.out から削除されたブロックは、method2.go というファイルに関連する特定のコンパイルテストの期待される出力の一部でした。

=========== ./method2.go
BUG: errchk: command succeeded unexpectedly:  6g ./method2.go

このブロックは、6g ./method2.go というコンパイルコマンドが、本来失敗すべきところで成功してしまった場合に、それをバグとして検出するためのゴールデンファイルエントリでした。つまり、このテストは「method2.go のコンパイルが成功してはいけない」という条件を検証しており、もし成功した場合は BUG: errchk: command succeeded unexpectedly というメッセージが golden.out に記録されることを期待していました。この行が削除されたということは、この特定のバグが修正されたか、あるいはこのテストケース自体が不要になったか、またはテストの検証方法が変更されたことを意味します。

関連リンク

参考にした情報源リンク

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

このコミットは、Go言語のリポジトリにおけるテスト関連ファイルの変更です。具体的には、test/bignum_test.gotest/golden.out の2つのファイルが修正されています。

  • test/bignum_test.go: Go言語の大きな数値(bignum)に関するテストコードが含まれています。
  • test/golden.out: テストの期待される出力(ゴールデンファイル)を記録しているファイルです。

コミット

  • コミットハッシュ: 02f718339b495210e8b9b5ed33ca3de6cc763c92
  • 作者: Rob Pike r@golang.org
  • コミット日時: 2008年11月4日 火曜日 14:33:47 -0800
  • 変更ファイル数: 2
  • 削除行数: 5

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

https://github.com/golang/go/commit/02f718339b495210e8b9b5ed33ca3de6cc763c92

元コミット内容

update golden.out

R=rsc
OCL=18482
CL=18484

変更の背景

このコミットの主な目的は、golden.out ファイルを更新することです。golden.out は、Go言語のテストスイートにおいて、特定のテストの期待される出力を記録する「ゴールデンファイル」として機能します。テストの実行結果がこのゴールデンファイルの内容と一致するかどうかを比較することで、テストの合否を判定します。

今回の変更は、test/bignum_test.go から print("PASSED\\n"); という行が削除されたことと、test/golden.out から =========== ./method2.go とそれに続くエラーチェックに関する行が削除されたことに関連しています。これは、テストの出力形式の変更、または特定のテストケースの削除/修正に伴い、期待される出力も更新する必要が生じたためと考えられます。特に、BUG: errchk: command succeeded unexpectedly という行の削除は、以前存在した特定のバグチェックが不要になったか、そのテスト方法が変更されたことを示唆しています。

前提知識の解説

ゴールデンファイルテスト

ゴールデンファイルテスト(またはスナップショットテスト)は、プログラムの出力が時間の経過とともに変化しないことを保証するためのテスト手法です。テストの初回実行時に、プログラムの出力(テキスト、画像、JSONなど)を「ゴールデンファイル」として保存します。その後のテスト実行では、現在の出力とゴールデンファイルの内容を比較し、両者が完全に一致すればテストは成功とみなされます。不一致があった場合は、出力が意図せず変更されたことを示し、開発者はその変更が意図的なものか、バグによるものかを判断します。意図的な変更であれば、ゴールデンファイルを更新します。

Go言語の初期のテストフレームワーク

このコミットが作成された2008年時点では、Go言語はまだ開発の初期段階にありました。現在のGo言語の標準テストパッケージ testing が確立される前であり、テストの実行方法や結果の検証方法も現在とは異なるアプローチが取られていた可能性があります。print("PASSED\\n"); のような直接的な出力は、初期のテストスクリプトやテストハーネスがその出力を解析してテストの成功を判断していたことを示唆しています。golden.out のようなファイルは、このような初期のテストシステムにおける期待値の管理に用いられていたと考えられます。

bignum パッケージ

bignum は "big number" の略で、通常の整数型(int, int64など)では表現できない非常に大きな数値を扱うための概念です。Go言語には標準ライブラリとして math/big パッケージがあり、任意精度の整数(Int)、有理数(Rat)、浮動小数点数(Float)を扱うことができます。test/bignum_test.go は、これらの大きな数値演算が正しく機能するかを検証するためのテストコードです。

技術的詳細

test/bignum_test.go の変更

削除された print("PASSED\\n"); は、main 関数内でテストが完了したことを示すための文字列出力でした。これは、テストランナーがこの文字列を検出することで、テストが正常に終了したと判断するような、シンプルなテスト実行環境で用いられていた可能性があります。現在のGoのテストフレームワークでは、テスト関数がエラーを返さずに終了すれば成功とみなされ、このような明示的な成功メッセージの出力は不要です。この行の削除は、テストフレームワークの進化、またはテスト結果の報告方法の変更を示唆しています。

test/golden.out の変更

test/golden.out から削除された以下の行は、特定のテストケース method2.go の出力に関するものでした。

=========== ./method2.go
BUG: errchk: command succeeded unexpectedly:  6g ./method2.go
  • =========== ./method2.go: これは、method2.go というファイルに関連するテスト出力のセクションの開始を示すマーカーです。
  • BUG: errchk: command succeeded unexpectedly: 6g ./method2.go: この行は、6g ./method2.go というコマンド(Goの初期のコンパイラである 6g を使って method2.go をコンパイルするコマンド)が、予期せず成功したことを示すバグチェックメッセージです。これは、本来コンパイルエラーになるべきコードが誤ってコンパイルできてしまった、あるいは特定の条件下でコンパイルが失敗するはずが成功してしまった、といった状況を検出するためのテストだったと考えられます。

この行が golden.out から削除されたということは、以下のいずれかの理由が考えられます。

  1. バグの修正: method2.go に関連するバグが修正され、この「予期せぬ成功」がもはや発生しなくなったため、このチェックが不要になった。
  2. テストの変更/削除: method2.go のテストケース自体が変更されたか、完全に削除されたため、その出力に関するゴールデンファイルのエントリも不要になった。
  3. テスト方法の変更: この種のバグチェックが、golden.out を介した出力比較ではなく、より洗練されたGoのテストフレームワークの機能(例: go test のエラーハンドリング)によって行われるようになった。

2008年というGo言語の非常に初期の段階であることを考慮すると、開発プロセスにおけるテストの試行錯誤や、コンパイラの安定化に伴うテスト内容の調整の一環である可能性が高いです。

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

test/bignum_test.go

--- a/test/bignum_test.go
+++ b/test/bignum_test.go
@@ -491,6 +491,4 @@ func main() {
 	// Rationals
 	// TODO add more tests
 	RatConv();
-\n-\tprint(\"PASSED\\n\");
 }\

test/golden.out

--- a/test/golden.out
+++ b/test/golden.out
@@ -37,9 +37,6 @@ Faulting address: 0x0
 pc: xxx


-=========== ./method2.go
-BUG: errchk: command succeeded unexpectedly:  6g ./method2.go
-
 =========== ./peano.go
 0! = 1
 1! = 1

コアとなるコードの解説

test/bignum_test.go の変更の解説

削除された print("PASSED\\n"); は、main 関数内で実行されるテストスイートの最後に、テストが成功したことを示すメッセージを出力するためのものです。Go言語の初期のテストハーネスが、この特定の文字列を標準出力から読み取ることで、テストの成功を判断していた可能性があります。この行の削除は、テストの成功判定ロジックがより洗練された方法(例えば、関数の戻り値やエラーの有無)に移行したことを示唆しています。

test/golden.out の変更の解説

test/golden.out から削除されたブロックは、method2.go というファイルに関連する特定のコンパイルテストの期待される出力の一部でした。

=========== ./method2.go
BUG: errchk: command succeeded unexpectedly:  6g ./method2.go

このブロックは、6g ./method2.go というコンパイルコマンドが、本来失敗すべきところで成功してしまった場合に、それをバグとして検出するためのゴールデンファイルエントリでした。つまり、このテストは「method2.go のコンパイルが成功してはいけない」という条件を検証しており、もし成功した場合は BUG: errchk: command succeeded unexpectedly というメッセージが golden.out に記録されることを期待していました。この行が削除されたということは、この特定のバグが修正されたか、あるいはこのテストケース自体が不要になったか、またはテストの検証方法が変更されたことを意味します。

関連リンク

参考にした情報源リンク