haskell 在一元上下文中使用具有覆盖率的QuickCheck属性

xuo3flqw  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(163)

我正在尝试编写一个QuickCheck属性,该属性使用cover来确保测试数据涵盖了特定的情况,并结合了测试涉及IO操作的事实。
问题基本上可归结为以下几点:

prop = do
  res <- exampleIOAction
  cover 40.0 (even res) "res is even" $ res > 0

-- some IO action that returns an Int, the actual implementation doesn't matter
exampleIOAction :: IO Int
exampleIOAction = undefined

有趣的细节是,我想基于IO操作的结果来编译cover,但是,由于Couldn't match expected type ‘IO b’ with actual type ‘Property’,代码无法编译。
我尝试使用Test.QuickCheck.Monadic,但无法使其工作。有没有办法使用QuickCheck来完成此操作?

jgzswidk

jgzswidk1#

import Test.QuickCheck.Monadic

prop :: Property
prop = monadicIO $ do
  res <- run exampleIOAction
  stop (cover 40.0 (even res) "res is even" $ res > 0)

相关问题