繁体   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