gpt4 book ai didi

haskell - 查找快速检查失败的值

转载 作者:行者123 更新时间:2023-12-03 22:33:16 25 4
gpt4 key购买 nike

当某个值未能通过 QuickCheck 测试时,我想将其用于调试。有什么办法我可以做类似的事情:

let failValue = quickCheck' myTest
in someStuff failValue

如果我的数据是 read能够那么我可能会破解一些方法从 IO 获取它,但事实并非如此。

最佳答案

我在 QuickCheck API 中找不到任何可以很好地做到这一点的东西,但这是我使用 monadic QuickCheck API 拼凑起来的东西。它截获并记录到您的属性的输入到 IORef , 并假设如果失败,最后一个是罪魁祸首,并在 Just 中返回。 .如果测试通过,结果是Nothing .这可能可以稍微改进一下,但对于简单的单参数属性,它应该可以完成这项工作。

import Control.Monad
import Data.IORef
import Test.QuickCheck
import Test.QuickCheck.Monadic

prop_failIfZero :: Int -> Bool
prop_failIfZero n = n /= 0

quickCheck' :: (Arbitrary a, Show a) => (a -> Bool) -> IO (Maybe a)
quickCheck' prop = do input <- newIORef Nothing
result <- quickCheckWithResult args (logInput input prop)
case result of
Failure {} -> readIORef input
_ -> return Nothing
where
logInput input prop x = monadicIO $ do run $ writeIORef input (Just x)
assert (prop x)
args = stdArgs { chatty = False }

main = do failed <- quickCheck' prop_failIfZero
case failed of
Just x -> putStrLn $ "The input that failed was: " ++ show x
Nothing -> putStrLn "The test passed"

关于haskell - 查找快速检查失败的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8191131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com