haskell - 如何编写需要非零数字的非空列表的 QuickCheck 属性?
问题描述
这是一个 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
and NonZero
,但我无法弄清楚语法,因此黑客将元素添加到列表中。我怎样才能避免这种黑客攻击?
解决方案
QuickCheck 捆绑了一个NonEmptyList
新类型,它的Arbitrary
实例只生成非空列表。您可以将其与NonZero
获取非零整数的非空列表:
propCheck :: NonEmptyList (NonZero Int) -> Bool
propCheck (coerce -> ns) = cogsRpm ns == go ns
我coerce
在视图模式中使用以简洁有效地将NonEmptyList (NonZero Int)
背面转换为 s 的常规列表Int
。
推荐阅读
- rust - 具有内部可变性的单元格允许任意突变动作
- html - Bootstrap flex 项目不能垂直居中
- flutter - 在具有空安全性的颤动中将函数作为参数传递
- amazon-web-services - Amazon Elastic Search 自定义终端节点
- file-upload - 我正在尝试使用带有 Roxima 主题的 Font Awesome 图标 - 有些不会上传
- python - 获取用户在 selenium 中查看的标签
- python - Python Permutations - 获得具有条件的全套结果
- mongodb - 如何计算MongoDB集合中存在数组内对象元素的文档数
- python - 如何让用户在 youtube-dl 中选择质量?
- c++ - ATL CImage::SetPixel 不适用于单色 BMP (nBPP=1)