问题标签 [haskell-hedgehog]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 使用 IO 的刺猬生成器
Hedgehog 官方网站上有一篇文章详细介绍了如何编写使用 IO 的 Hedgehog 生成器。里面的相关代码是:
...随后Gen.sample genWord
实际调用生成器来创建一些 Text 值。
代码语法检查良好。但是,当我尝试运行它时,我被告知:
我认为发生错误是因为该示例仅来自旧版本的库或 GHC,但我不知道如何追踪实际问题并修复它。我无法在 Hedgehog 源代码本身或其他地方找到类似的示例。
我喜欢一个解决方案(当然),但更多的是关于如何解决这类问题的提示。
haskell - Haskell Hedgehog-fn 自定义函数生成器
使用hedgehog-fn时,是否可以创建生成满足特定标准的函数的函数生成器?
例如:是否有可能有一个只生成双射函数的函数生成器?
haskell - 如何创建 Haskell 刺猬类型`Gen a` 的值?
我正在尝试编写一个基于属性的测试来验证相等性的一致性。
为此,我需要能够通过提供 2 个类型的值来运行它Gen a
:
我的问题是:如何创建 type 的值Gen a
?
注意:基于属性的测试还没有完成,它仍然需要过滤生成的相等的值。
haskell - 运行有状态的 Hedgehog 生成器
我采用了以下树生成器:
并将其重写为有状态的:
但是虽然我之前可以写,例如
我不能再用有状态的版本做到这一点,因为我肯定没有初始化状态:
试图解决这个问题(假设但不完全相信GenT
并StateT
通勤),
我认为有一个非常小的最后一部分与类型族有关,我不明白。那会是什么?例如,如果我添加
(只是因为我以前见过这个)
我得到另一个错误,
不幸的是,在这一点上,我只是开始猜错要应用哪个约束。
更新:另一方面,我尝试构建一个特定的 monad 转换器堆栈,因为genTree0
并且genTree1
具有相当普遍的签名:
但这也有点错误。至少MonadGen
。
我必须在这里输入什么才能开始,更好的是,我在哪里可以学习比猜测更好的方法?
haskell - 返回列表并获取 Hedgehog 状态机中的项目
我有一个状态机模型
然后我有一个Command gen exec [Update update]
返回exec
列表UUID
,即它有类型
这反过来意味着update
需要这样的类型
AFAICS 为了真正更新我的模型,我需要将其Var [UUID] v
转换为[Var UUID v]
. 我一直在盯着 Hedgehog 中的函数看了一段时间,但什么都没有跳出来……还是我再次认为这一切都错了?:)
haskell - QuickCheck 中的相关收缩
我面临着为生成器编写收缩函数的问题,该函数取决于另一个生成器的输出值。基本上是以下形式的生成器:
其中genA :: Gen a
, f :: a -> Gen b
g :: a -> b -> c
. 为论证起见假设g = (,)
。那么问题是给定一对(a, b)
,收缩可能会破坏,和a
之间存在的关系。a
f
b
举个例子,考虑以下具有缓存长度的列表:
该arbitrary
函数可以很容易地定义:
然而,缩小表单元素需要了解和List n xs
之间的关系。n
xs
在前面的示例中,这不是问题,因为 和 之间的关系n
很xs
容易确定,但是对于我正在解决的问题,确定这种关系并不是微不足道的。
像hedgehog
该功能集成收缩这样的库将解决这个特定问题(尽管并非总是如此),但是我想知道在QuickCheck
.
这是一个示例,显示如何hedgehog
找到列表长度小于 5 的属性的最小反例(它始终List 5 [ 0 , 0 , 0 , 0 , 0 ]
作为反例给出)。这是我(我认为我)目前如何解决这个问题的一个例子,基本上是通过模拟集成收缩。
另外,请注意,monadic 接口的行为在hedgehog
大多数情况下可能不是您想要的。
haskell - 为什么这个 Hedgehog 生成器不收缩得更快?
我制作了一个 Hedgehog 生成器,它通过以下方式生成任意 256 位值:
我认为,让 size 参数确定数字中的字节数对我的应用程序很有意义。但是,评估此生成器如何缩小并应用于ceiling . logBase 2
此,我的问题是:
为什么刺猬决定强调其初始结果的附近?我是否以某种方式误解了“不受大小参数影响的范围”的含义?( Range.constant
) 我会认为这里的任何收缩都必须具有较少的位数。
f# - 如何在刺猬中定义一个生成特定长度列表的生成器?
我尝试在 f#hedgehog 中创建一个整数列表。该列表应包含 10 到 20 个元素,并包含 0 到 5 之间的整数。
抛出异常:
因此,通常生成器会产生正确的结果,但收缩逻辑会出现问题。这是一个错误吗?我做错了吗?我是否错过了解释这一点的文档?
haskell - 并行运行属性测试的迭代?
我有一个基于属性的测试(在 Hedgehog 中),它执行以下操作:
- 将项目推送到对其进行排队的远程服务
- 轮询远程服务以确定项目的处理时间
- 在项目的处理结果上断言一些属性
测试运行非常缓慢,因为 100 次迭代是按顺序运行的。有什么办法可以并行化吗?checkParallel听起来像是并行运行多个属性测试,而我希望并行运行同一测试的多个迭代?