这是一个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
这会强制肯定,因此我尝试结合了很多东西来获得listOf1
和NonZero
,但是我无法弄清楚语法,因此黑客将一个元素添加到列表中。我该如何避免这种入侵?
答案 0 :(得分:6)
QuickCheck与NonEmptyList
新类型捆绑在一起,新类型的Arbitrary
实例仅生成非空列表。您可以将其与NonZero
结合使用以获得非零整数的非空列表:
propCheck :: NonEmptyList (NonZero Int) -> Bool
propCheck (coerce -> ns) = cogsRpm ns == go ns
我正在coerce
中使用view pattern,以简洁高效地将NonEmptyList (NonZero Int)
转换成Int
s的常规列表。