github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/testing/quick/quick.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // quickパッケージは、ブラックボックステストを支援するためのユーティリティ関数を実装します。 6 // 7 // testing/quickパッケージは凍結されており、新たな機能は受け入れられません。 8 package quick 9 10 import ( 11 "github.com/shogo82148/std/math/rand" 12 "github.com/shogo82148/std/reflect" 13 ) 14 15 // Generatorは、自身の型のランダムな値を生成することができます。 16 type Generator interface { 17 Generate(rand *rand.Rand, size int) reflect.Value 18 } 19 20 // Valueは、指定された型の任意の値を返します。 21 // もし型が [Generator] インターフェースを実装しているなら、それが使用されます。 22 // 注意:構造体の任意の値を作成するためには、全てのフィールドがエクスポートされていなければなりません。 23 func Value(t reflect.Type, rand *rand.Rand) (value reflect.Value, ok bool) 24 25 // Config構造体は、テストの実行オプションを含みます。 26 type Config struct { 27 // MaxCountは、反復の最大回数を設定します。 28 // もしゼロなら、MaxCountScaleが使用されます。 29 MaxCount int 30 // MaxCountScaleは、デフォルトの最大値に適用される非負のスケールファクターです。 31 // カウントがゼロの場合、デフォルト(通常は100)が適用されますが、 32 // -quickchecksフラグによって設定することもできます。 33 MaxCountScale float64 34 // Randは、乱数のソースを指定します。 35 // もしnilなら、デフォルトの疑似乱数ソースが使用されます。 36 Rand *rand.Rand 37 // Valuesは、テスト対象の関数の引数と一致する任意のreflect.Valuesのスライスを生成する関数を指定します。 38 // もしnilなら、トップレベルのValue関数がそれらを生成するために使用されます。 39 Values func([]reflect.Value, *rand.Rand) 40 } 41 42 // SetupErrorは、テストされる関数に関係なく、checkの使用方法に関するエラーの結果です。 43 type SetupError string 44 45 func (s SetupError) Error() string 46 47 // CheckErrorは、Checkがエラーを見つけた結果です。 48 type CheckError struct { 49 Count int 50 In []any 51 } 52 53 func (s *CheckError) Error() string 54 55 // CheckEqualErrorは、[CheckEqual] がエラーを見つけた結果です。 56 type CheckEqualError struct { 57 CheckError 58 Out1 []any 59 Out2 []any 60 } 61 62 func (s *CheckEqualError) Error() string 63 64 // Checkは、fがfalseを返すような入力を探します。fは、boolを返す任意の関数です。 65 // fは、各引数に対して任意の値を使用して繰り返し呼び出されます。 66 // もしfが特定の入力でfalseを返した場合、Checkはその入力を *[CheckError] として返します。 67 // 例えば: 68 // 69 // func TestOddMultipleOfThree(t *testing.T) { 70 // f := func(x int) bool { 71 // y := OddMultipleOfThree(x) 72 // return y%2 == 1 && y%3 == 0 73 // } 74 // if err := quick.Check(f, nil); err != nil { 75 // t.Error(err) 76 // } 77 // } 78 func Check(f any, config *Config) error 79 80 // CheckEqualは、fとgが異なる結果を返す入力を探します。 81 // fとgは、各引数に対して任意の値を使用して繰り返し呼び出されます。 82 // もしfとgが異なる答えを返した場合、CheckEqualはその入力と出力を記述する *[CheckEqualError] を返します。 83 func CheckEqual(f, g any, config *Config) error