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