如何编写任意修改其任意输入的QuickCheck属性?

问题描述 投票:0回答:1

假设我要验证isSubsequenceOf。然后我需要生成一些xs,然后通过任意添加或删除一些元素来生成ys。然后我可以验证由此获得的所有对的属性。使用sublistOf,我会这样:

\xs -> sublistOf xs `isSubsequenceOf` xs

- 除非这不是类型检查。

不幸的是,我不了解整体QuickCheck库的设计,即使是这些看似微不足道的案例也让我感到很困惑。我是否必须拼出Gen Result类型的成熟monadic设备?它有点违背了抽象的目的。

haskell testing
1个回答
2
投票

我是否必须拼出一个类型为Gen Result的完整Monadic设备?

什么是“成熟的monadic设备”?是的,您应该使用Gen monad,但它并不难,并且有一个Testable实例供您使用:

mytest :: [Int] -> Gen Bool
mytest xs = do ys <- sublistOf xs
               pure $ ys `isSubsequenceOf` xs
  where isSubsequenceOf _ _ = True

使用方法:

*Main> quickCheck mytest
+++ OK, passed 100 tests.
© www.soinside.com 2019 - 2024. All rights reserved.