5

「quickCheck prop_xyz」を実行するたびに、新しいランダム シードが使用されます。常に同じランダム シードを使用するように QuickCheck を強制するにはどうすればよいですか?

ありがとう!

4

4 に答える 4

3

quickCheckWith機能を使用する

quickCheckWith (stdArgs{replay = Just (myNewGen, testSize)}) property

失敗したテストがあり、それを再利用したい場合は、

result <- quickCheckResult failing_prop
let gen = usedSeed result
let size = usedSize result

失敗したテストで使用されるサイズとシードを取得します。

再現可能なエラーも必要なので、適切な縮小アルゴリズムが役立つ場合があります。デフォルトでは戻ります[]が、十分に良いものを提供すると、異なるランダムな実行でも同じ(最小限の)失敗になる可能性があります。

于 2013-10-04T19:51:25.477 に答える
0

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)

于 2013-10-04T21:47:41.687 に答える