簡體   English   中英

如何編寫可任意修改其任意輸入的QuickCheck屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM