问题标签 [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.
haskell - 条件 QuickCheck 属性
我为一个函数编写了一个 QuickCheck 属性,该函数将两个排序的输入合并到一个排序的输出中:
也就是说,当输入被排序时,输出也被排序。也可以写成:
但我真的不喜欢这两个版本。QuickCheck 中的“条件属性”是否有更好的语法?
haskell - Haskell - 在 QuickCheck 的帮助下进行 Parsec 测试
我想为 Parsec 解析器编写一个测试。这是解析器和数据结构的示例:
我知道我需要检查parse = parse . pretty . parse
财产。但是我应该如何生成正确和不正确的测试用例呢?一般来说,我应该如何为给定的BNF生成测试用例?我知道instance Arbitrary
,但对此没有太大帮助。
如果您为这个简单的解析器提供一个注释良好的生成器示例,我将不胜感激。
haskell - 从 Gen (Maybe Int) 转换为 Maybe Int
我想将 a 转换Gen (Maybe Int)
为Maybe Int
. 我有一个生成 1 到 9 之间的随机 Just Int 的函数。我想使用单元函数,但我无法更改其类型签名中的任何内容。有什么建议么?
haskell - 在 QuickCheck 中使用自定义生成器与任意实例
这是一个简单的功能。它接受一个输入Int
并返回一个(可能为空的)(Int, Int)
对列表,其中输入Int
是任何对的立方元素的总和。
我想测试上述是否属实的属性;如果我对每个元素进行立方体并对任何返回元组求和,那么我会得到我的输入:
出于运行时的考虑,我想在Int
使用 QuickCheck 进行测试时将输入 s 限制为一定的大小。我可以定义一个合适的类型和Arbitrary
实例:
然后我想我必须定义使用SmallInt
而不是的函数和属性的版本Int
:
这工作正常,标准的 100 次测试按预期通过。但是当我真正需要的只是一个自定义生成器时,似乎没有必要定义一个新的类型、实例和函数。所以我尝试了这个:
现在,我前几次运行它,一切正常,所有测试都通过了。但在随后的运行中,我观察到了失败。增加测试大小可靠地找到一个:
由于存在从 QuickCheck 返回的两个缩小的输入 - 0 和 8205379,我在这里有点困惑,我直观地期待一个。此外,这些输入按预期工作(至少在我的可显示属性上):
Gen
因此,使用我定义的自定义的属性似乎显然存在问题。
我做错了什么?
haskell - Haskell快速检查问题
我正在使用 quickcheck 编写一个简单的测试。
每当我通过 运行它时$ runhaskell test.hs
,我都会看到两种不同的结果之一。要么我得到: 测试 +++ 好的,通过了 100 次测试。或者:我没有得到任何输出,程序终止。我无法对这种行为进行推理。
这是在 Quickcheck 2.5.1.1 和 ghc 7.4.2 上。
haskell - QuickCheck 2 批处理
QuickCheck的模块在版本 2Batch
中被删除(1.2.0.1 仍然有它)。正因为如此,我总是觉得 -将多个测试放在一起有点 hacky。我是否忽略了 QuickCheck 2 中的后续功能?是否有将独立测试组合在一起的规范方法?mapM_
haskell - 显示 QuickCheck 属性失败的原因并处理测试函数中的异常
我有一个 QuickCheck 属性测试一个功能f
。该属性将函数映射到f
某个列表xs
并检查结果的某些元素属性。在失败的情况下,我想显示xs
与此失败相关的元素。考虑以下属性:
这适用于实施
和quickcheck prop
输出
但是,如果f
抛出异常,即
然后quickcheck prop
输出
如何编写一个捕获第二个异常并返回“Just 0”的属性,就像前面的示例一样?我想,可以使用whenFail
or whenFail'
,但我还不了解 QuickCheck 的内部结构。
list - 为什么 Haskell 给出“模糊类型变量”错误?
一个过去的论文问题问我;定义一个函数 p :: [a] -> [a] 交换列表中的每两个项目。您的函数应该将第一个与第二个项目交换,第三个与第四个交换,依此类推。通过列表理解定义一个,另一个通过递归定义。
好吧,这就是我想出的:
这些功能工作正常,但我想检查两者是否相同,所以我把 quickCheck 放在下面;但是由于某种原因,这给了我一个错误,说“使用prop_2引起的模糊类型变量[a0]”
我只是不明白这里出了什么问题,我看起来非常明智...... Haskell 到底在抱怨什么?
haskell - 在 QuickCheck 中缩小记录的惯用方法
假设我有一个记录类型:
编写 Arbitrary 实例的一种简洁方式使用 Control.Applicative,如下所示:
因此, Foo 的收缩列表是其成员的所有收缩的笛卡尔积。
但是,如果其中一个收缩返回 [ ] 那么整个 Foo 将不会收缩。所以这行不通。
我可以尝试通过在收缩列表中包含原始值来保存它:
但是现在shrink (Foo 0 0 0) 将返回[Foo 0 0 0],这意味着收缩永远不会终止。所以这也行不通。
看起来这里应该使用除了 <*> 以外的其他东西,但我看不到是什么。
haskell - 使用 QuickCheck 在随机参数处评估函数
我正在尝试使用 quickcheck 来生成给定函数的随机参数(假设它的所有类型都有 Arbitrary 实例和 Show 实例)以及在这些参数处对函数的评估。我只需要打印参数的值并在之后评估答案。所以我期望一个具有以下类型的函数
我仍然不确定这里的类型,但我认为Testable a
可以。我仍然无法真正得到我需要的东西。Rose
我对快速检查数据类型等的混乱感到困惑Result
。
更新
假设我有一个功能
然后我假设一个行为像
其中 1 和 3 是为 生成的随机值,Int
而 4 是f 1 3
。