簡體   English   中英

如何編寫一個QuickCheck屬性,該屬性需要一個非空的非零數字列表?

[英]How do I write a QuickCheck property which expects a non-empty list of non-zero numbers?

這是一個hack( cogsRpm是一個用戶提供的函數,應該匹配go的輸出):

propCheck ns = cogsRpm (ns ++ [42])  == go (ns ++ [42])

我添加了42來停止生成零長度列表的快速檢查。 它也可能會失敗,因為它也不應該在那里有零。

我閱讀了文檔,但是沒有足夠的例子來解析如何實際使用它們。 我確實設法在另一個案例中得到這個:

prop_check (Positive x) (Positive y)  = updateHealth x y == if y > x then 0 else x-y

這是強制積極的,我嘗試結合一堆東西來獲得listOf1NonZero ,但我無法弄清楚語法,因此黑客將一個元素添加到列表中。 我該如何避免這種黑客攻擊?

QuickCheck捆綁了一個NonEmptyList newtype,其Arbitrary實例只生成非空列表。 您可以將其與NonZero結合使用以獲取非零整數的非空列表:

propCheck :: NonEmptyList (NonZero Int) -> Bool
propCheck (coerce -> ns) = cogsRpm ns == go ns

我使用coerce視圖模式 ,以簡潔,高效地打開NonEmptyList (NonZero Int)回的常規列表Int秒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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