问题标签 [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.

0 投票
0 回答
144 浏览

haskell - 使用 IO 的刺猬生成器

Hedgehog 官方网站上有一篇文章详细介绍了如何编写使用 IO 的 Hedgehog 生成器。里面的相关代码是:

...随后Gen.sample genWord实际调用生成器来创建一些 Text 值。

代码语法检查良好。但是,当我尝试运行它时,我被告知:

我认为发生错误是因为该示例仅来自旧版本的库或 GHC,但我不知道如何追踪实际问题并修复它。我无法在 Hedgehog 源代码本身或其他地方找到类似的示例。

我喜欢一个解决方案(当然),但更多的是关于如何解决这类问题的提示。

0 投票
1 回答
104 浏览

haskell - Haskell Hedgehog-fn 自定义函数生成器

使用hedgehog-fn时,是否可以创建生成满足特定标准的函数的函数生成器?

例如:是否有可能有一个只生成双射函数的函数生成器?

0 投票
1 回答
76 浏览

haskell - 如何创建 Haskell 刺猬类型`Gen a` 的值?

我正在尝试编写一个基于属性的测试来验证相等性的一致性。

为此,我需要能够通过提供 2 个类型的值来运行它Gen a

我的问题是:如何创建 type 的值Gen a

注意:基于属性的测试还没有完成,它仍然需要过滤生成的相等的值。

0 投票
0 回答
112 浏览

haskell - 运行有状态的 Hedgehog 生成器

我采用了以下树生成器:

并将其重写为有状态的:

但是虽然我之前可以写,例如

我不能再用有状态的版本做到这一点,因为我肯定没有初始化状态:

试图解决这个问题(假设但不完全相信GenTStateT通勤),

我认为有一个非常小的最后一部分与类型族有关,我不明白。那会是什么?例如,如果我添加

(只是因为我以前见过这个)

我得到另一个错误,

不幸的是,在这一点上,我只是开始猜错要应用哪个约束。

更新:另一方面,我尝试构建一个特定的 monad 转换器堆栈,因为genTree0并且genTree1具有相当普遍的签名:

但这也有点错误。至少MonadGen

我必须在这里输入什么才能开始,更好的是,我在哪里可以学习比猜测更好的方法?

0 投票
1 回答
100 浏览

haskell - 返回列表并获取 Hedgehog 状态机中的项目

我有一个状态机模型

然后我有一个Command gen exec [Update update]返回exec列表UUID,即它有类型

这反过来意味着update需要这样的类型

AFAICS 为了真正更新我的模型,我需要将其Var [UUID] v转换为[Var UUID v]. 我一直在盯着 Hedgehog 中的函数看了一段时间,但什么都没有跳出来……还是我再次认为这一切都错了?:)

0 投票
2 回答
107 浏览

haskell - QuickCheck:为什么没有通过测试的功能以及改用什么功能?

为什么没有QuickCheck类似于hedgehog's的功能success?特别是我想知道如何翻译如下属性:

如果QuickCheck我使用=/=then 我被迫返回一些 type Property,并且似乎没有常量函数来返回传递的属性。

所以我要么不得不求助于Bool类型:

或者对 使用非常尴尬的编码success,例如:

有没有更好的方法来表达上面的属性QuickCheck

0 投票
1 回答
115 浏览

haskell - QuickCheck 中的相关收缩

我面临着为生成器编写收缩函数的问题,该函数取决于另一个生成器的输出值。基本上是以下形式的生成器:

其中genA :: Gen a, f :: a -> Gen b g :: a -> b -> c. 为论证起见假设g = (,)。那么问题是给定一对(a, b),收缩可能会破坏,和a之间存在的关系。afb

举个例子,考虑以下具有缓存长度的列表:

arbitrary函数可以很容易地定义:

然而,缩小表单元素需要了解和List n xs之间的关系。nxs

在前面的示例中,这不是问题,因为 和 之间的关系nxs容易确定,但是对于我正在解决的问题,确定这种关系并不是微不足道的。

hedgehog该功能集成收缩这样的库将解决这个特定问题(尽管并非总是如此),但是我想知道在QuickCheck.


是一个示例,显示如何hedgehog找到列表长度小于 5 的属性的最小反例(它始终List 5 [ 0 , 0 , 0 , 0 , 0 ]作为反例给出)。这是我(我认为我)目前如何解决这个问题的一个例子,基本上是通过模拟集成收缩

另外,请注意,monadic 接口的行为在hedgehog 大多数情况下可能不是您想要的

0 投票
1 回答
73 浏览

haskell - 为什么这个 Hedgehog 生成器不收缩得更快?

我制作了一个 Hedgehog 生成器,它通过以下方式生成任意 256 位值:

我认为,让 size 参数确定数字中的字节数对我的应用程序很有意义。但是,评估此生成器如何缩小并应用于ceiling . logBase 2此,我的问题是:

为什么刺猬决定强调其初始结果的附近?我是否以某种方式误解了“不受大小参数影响的范围”的含义?( Range.constant) 我会认为这里的任何收缩都必须具有较少的位数。

0 投票
0 回答
95 浏览

f# - 如何在刺猬中定义一个生成特定长度列表的生成器?

我尝试在 f#hedgehog 中创建一个整数列表。该列表应包含 10 到 20 个元素,并包含 0 到 5 之间的整数。

抛出异常:

因此,通常生成器会产生正确的结果,但收缩逻辑会出现问题。这是一个错误吗?我做错了吗?我是否错过了解释这一点的文档?

0 投票
0 回答
42 浏览

haskell - 并行运行属性测试的迭代?

我有一个基于属性的测试(在 Hedgehog 中),它执行以下操作:

  • 将项目推送到对其进行排队的远程服务
  • 轮询远程服务以确定项目的处理时间
  • 在项目的处理结果上断言一些属性

测试运行非常缓慢,因为 100 次迭代是按顺序运行的。有什么办法可以并行化吗?checkParallel听起来像是并行运行多个属性测试,而我希望并行运行同一测试的多个迭代