假设我想验证isSubsequenceOf
。然后我需要生成一些xs
,然后通过任意添加或删除一些元素来生成ys
。然后我可以验证由此获得的所有对的属性。使用sublistOf,我会这样:
\xs -> sublistOf xs `isSubsequenceOf` xs
- 除非这不是类型检查。
不幸的是,我不了解整体QuickCheck库的设计,即使是这些看似微不足道的案例也让我感到很困惑。我是否必须拼出Gen Result
类型的成熟monadic设备?它有点违背了抽象的目的。
答案 0 :(得分: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.