问题标签 [quickcheck]

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 投票
1 回答
3106 浏览

haskell - 条件 QuickCheck 属性

我为一个函数编写了一个 QuickCheck 属性,该函数将两个排序的输入合并到一个排序的输出中:

也就是说,当输入被排序时,输出也被排序。也可以写成:

但我真的不喜欢这两个版本。QuickCheck 中的“条件属性”是否有更好的语法?

0 投票
1 回答
941 浏览

haskell - Haskell - 在 QuickCheck 的帮助下进行 Parsec 测试

我想为 Parsec 解析器编写一个测试。这是解析器和数据结构的示例:

我知道我需要检查parse = parse . pretty . parse财产。但是我应该如何生成正确不正确的测试用例呢?一般来说,我应该如何为给定的BNF生成测试用例?我知道instance Arbitrary,但对此没有太大帮助。

如果您为这个简单的解析器提供一个注释良好的生成器示例,我将不胜感激。

0 投票
2 回答
770 浏览

haskell - 从 Gen (Maybe Int) 转换为 Maybe Int

我想将 a 转换Gen (Maybe Int)Maybe Int. 我有一个生成 1 到 9 之间的随机 Just Int 的函数。我想使用单元函数,但我无法更改其类型签名中的任何内容。有什么建议么?

0 投票
1 回答
2666 浏览

haskell - 在 QuickCheck 中使用自定义生成器与任意实例

这是一个简单的功能。它接受一个输入Int并返回一个(可能为空的)(Int, Int)对列表,其中输入Int是任何对的立方元素的总和。

我想测试上述是否属实的属性;如果我对每个元素进行立方体并对任何返回元组求和,那么我会得到我的输入:

出于运行时的考虑,我想在Int使用 QuickCheck 进行测试时将输入 s 限制为一定的大小。我可以定义一个合适的类型和Arbitrary实例:

然后我想我必须定义使用SmallInt而不是的函数和属性的版本Int

这工作正常,标准的 100 次测试按预期通过。但是当我真正需要的只是一个自定义生成器时,似乎没有必要定义一个新的类型、实例和函数。所以我尝试了这个:

现在,我前几次运行它,一切正常,所有测试都通过了。但在随后的运行中,我观察到了失败。增加测试大小可靠地找到一个:

由于存在从 QuickCheck 返回的两个缩小的输入 - 0 和 8205379,我在这里有点困惑,我直观地期待一个。此外,这些输入按预期工作(至少在我的可显示属性上):

Gen因此,使用我定义的自定义的属性似乎显然存在问题。

我做错了什么?

0 投票
0 回答
184 浏览

haskell - Haskell快速检查问题

我正在使用 quickcheck 编写一个简单的测试。

每当我通过 运行它时$ runhaskell test.hs,我都会看到两种不同的结果之一。要么我得到: 测试 +++ 好的,通过了 100 次测试。或者:我没有得到任何输出,程序终止。我无法对这种行为进行推理。

这是在 Quickcheck 2.5.1.1 和 ghc 7.4.2 上。

0 投票
1 回答
779 浏览

haskell - QuickCheck 2 批处理

QuickCheck的模块在版本 2Batch中被删除(1.2.0.1 仍然有它)。正因为如此,我总是觉得 -将多个测试放在一起有点 hacky。我是否忽略了 QuickCheck 2 中的后续功能?是否有将独立测试组合在一起的规范方法?mapM_

0 投票
1 回答
501 浏览

haskell - 显示 QuickCheck 属性失败的原因并处理测试函数中的异常

我有一个 QuickCheck 属性测试一个功能f。该属性将函数映射到f某个列表xs并检查结果的某些元素属性。在失败的情况下,我想显示xs与此失败相关的元素。考虑以下属性:

这适用于实施

quickcheck prop输出

但是,如果f抛出异常,即

然后quickcheck prop输出

如何编写一个捕获第二个异常并返回“Just 0”的属性,就像前面的示例一样?我想,可以使用whenFailor whenFail',但我还不了解 QuickCheck 的内部结构。

0 投票
1 回答
1747 浏览

list - 为什么 Haskell 给出“模糊类型变量”错误?

一个过去的论文问题问我;定义一个函数 p :: [a] -> [a] 交换列表中的每两个项目。您的函数应该将第一个与第二个项目交换,第三个与第四个交换,依此类推。通过列表理解定义一个,另一个通过递归定义。

好吧,这就是我想出的:

这些功能工作正常,但我想检查两者是否相同,所以我把 quickCheck 放在下面;但是由于某种原因,这给了我一个错误,说“使用prop_2引起的模糊类型变量[a0]”

我只是不明白这里出了什么问题,我看起来非常明智...... Haskell 到底在抱怨什么?

0 投票
2 回答
908 浏览

haskell - 在 QuickCheck 中缩小记录的惯用方法

假设我有一个记录类型:

编写 Arbitrary 实例的一种简洁方式使用 Control.Applicative,如下所示:

因此, Foo 的收缩列表是其成员的所有收缩的笛卡尔积。

但是,如果其中一个收缩返回 [ ] 那么整个 Foo 将不会收缩。所以这行不通。

我可以尝试通过在收缩列表中包含原始值来保存它:

但是现在shrink (Foo 0 0 0) 将返回[Foo 0 0 0],这意味着收缩永远不会终止。所以这也行不通。

看起来这里应该使用除了 <*> 以外的其他东西,但我看不到是什么。

0 投票
2 回答
667 浏览

haskell - 使用 QuickCheck 在随机参数处评估函数

我正在尝试使用 quickcheck 来生成给定函数的随机参数(假设它的所有类型都有 Arbitrary 实例和 Show 实例)以及在这些参数处对函数的评估。我只需要打印参数的值并在之后评估答案。所以我期望一个具有以下类型的函数

我仍然不确定这里的类型,但我认为Testable a可以。我仍然无法真正得到我需要的东西。Rose我对快速检查数据类型等的混乱感到困惑Result

更新

假设我有一个功能

然后我假设一个行为像

其中 1 和 3 是为 生成的随机值,Int而 4 是f 1 3