関数をテストするQuickCheckプロパティがありますf
。f
プロパティは、関数をいくつかのリストにマップしxs
、結果の要素ごとのプロパティをチェックします。xs
失敗した場合は、この失敗に関連する要素を表示したいと思います。次のプロパティを検討してください。
prop x =
printTestCase ("Failed for value " ++ show failure) $ isNothing failure
where
failure = fmap fst $ find (not . snd) $ map (\n -> (n, f x n == n)) [10..20]
これは実装には問題なく機能します
f = (+)
およびquickcheck prop
出力
*** Failed! Falsifiable (after 2 tests):
1
Failed for value Just 10
ただし、f
例外をスローした場合、つまり
f = undefined
その後、quickcheck prop
出力
*** Failed! Exception: 'Prelude.undefined' (after 1 test):
()
Failed for value Exception thrown by generator: 'Prelude.undefined'
前の例のように、この2番目の例外をキャッチして「Just0」を返すプロパティを作成するにはどうすればよいですか?whenFail
おそらく、これを使用することもできますwhenFail'
が、QuickCheckの内部をまだ理解していません。