[英]How do I write a QuickCheck property which expects a non-empty list of non-zero numbers?
[英]How do I write a QuickCheck property that arbitrarily modifies its arbitrary input?
假設我要驗證isSubsequenceOf
。 然后,我需要生成一些xs
,然后通過任意添加或刪除一些元素從中生成ys
。 然后,我可以驗證由此獲得的所有對的屬性。 使用sublistOf ,我會這樣:
\xs -> sublistOf xs `isSubsequenceOf` xs
—除非這不鍵入檢查。
不幸的是,我總體上不了解QuickCheck庫的設計,即使是這種看似微不足道的案例也讓我很困惑。 我是否必須拼寫出Gen Result
類型的成熟單子設備? 它違背了抽象的目的。
我是否必須拼寫出Gen Result類型的成熟單子設備?
什么是“成熟的單聲道設備”? 是的,您可能應該使用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.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.