「quickCheck prop_xyz」を実行するたびに、新しいランダム シードが使用されます。常に同じランダム シードを使用するように QuickCheck を強制するにはどうすればよいですか?
ありがとう!
「quickCheck prop_xyz」を実行するたびに、新しいランダム シードが使用されます。常に同じランダム シードを使用するように QuickCheck を強制するにはどうすればよいですか?
ありがとう!
quickCheckWith
機能を使用する
quickCheckWith (stdArgs{replay = Just (myNewGen, testSize)}) property
失敗したテストがあり、それを再利用したい場合は、
result <- quickCheckResult failing_prop
let gen = usedSeed result
let size = usedSize result
失敗したテストで使用されるサイズとシードを取得します。
再現可能なエラーも必要なので、適切な縮小アルゴリズムが役立つ場合があります。デフォルトでは戻ります[]
が、十分に良いものを提供すると、異なるランダムな実行でも同じ(最小限の)失敗になる可能性があります。
Generator
失敗の原因を特定したい場合は、次のようにします。
import Test.QuickCheck
import System.Random
reproducableTest :: Testable a => a -> Maybe (StdGen, Int) -> IO ()
reproducableTest prop repl = do result <- quickCheckWithResult stdArgs{replay = repl} prop
case result of
Failure{interrupted = False} -> do putStrLn $ "Use " ++ show (usedSeed result) ++ " as the initial seed"
putStrLn $ "Use " ++ show (usedSize result) ++ " as the initial size"
_ -> return ()
関数の引数として使用できるのは、2 つのシード番号のうち最初の番号だけです。したがって、プロパティがある場合prop
、最初の呼び出しは になりますreproducableTest prop Nothing
。あなたは次のようなものを得るでしょう
Use x y as the initial seed
Use z as the initial size
次に、次のように再度呼び出しますreproducableTest prop $ Just (mkStdGen x , z)