関数の単体テストを書きたいとし(!!)
ます。
my_prop xs n = ...
n を有効なインデックスのみに制限したいのですが、次のようなことができることはわかっています
my_prop xs n = (not.null) (drop n xs) ==> ...
しかし、これにより、生成されたケースの大部分が無効になり、破棄されます。xs
QuickCheck が最初にリストを生成し、その値を使用して有効なケースのみを生成するように設定する方法はありn
ますか?
関数の単体テストを書きたいとし(!!)
ます。
my_prop xs n = ...
n を有効なインデックスのみに制限したいのですが、次のようなことができることはわかっています
my_prop xs n = (not.null) (drop n xs) ==> ...
しかし、これにより、生成されたケースの大部分が無効になり、破棄されます。xs
QuickCheck が最初にリストを生成し、その値を使用して有効なケースのみを生成するように設定する方法はありn
ますか?
有効なインデックスのみを作成するジェネレーターを作成し、次のようにプロパティを書き込むことができます
import Test.QuickCheck
import Test.QuickCheck.Gen
import System.Random
indices :: [a] -> Gen Int
indices xs = MkGen $ \sg _ -> fst $ randomR (0, length xs - 1) sg
my_prop :: [Char] -> Property
my_prop xs = not (null xs) ==> forAll (indices xs) (\i -> xs !! i /= '0')
引数を削除しInt
ます。