[英]How can I constrain a QuickCheck parameter to a list of non-empty Strings?
[英]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
这是强制积极的,我尝试结合一堆东西来获得listOf1
和NonZero
,但我无法弄清楚语法,因此黑客将一个元素添加到列表中。 我该如何避免这种黑客攻击?
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.