问题标签 [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 投票
3 回答
573 浏览

haskell - Quickcheck 中的测试不相等?

我是新手,QuickCheck不能完全理解如何使用它。

假设我不小心用 a Set(而不是 a List)实现了一个数据类型:

然后后来遇到了这个错误,其中两个对象是相等的,即使它们不应该:

如何编写QuickCheck测试用例来测试这种情况?在伪代码中,这看起来像这样:

我已经尝试查看项目 github 上的示例,但似乎它们并没有涵盖这些微不足道的案例。

欢迎任何提示!

0 投票
2 回答
936 浏览

testing - Test.QuickCheck:加快测试同一类型的多个属性

我正在测试一个随机生成器,生成我自己类型的实例。为此,我有一个自定义实例Arbitrary

这适用于Test.QuickCheck(实际上Test.Framework)测试生成的值是否具有某些属性。但是,我要检查的属性很多,添加的越多,验证它们所需的时间就越多。

有没有办法使用相同的生成值来测试每个属性,而不是每次都重新生成它们?我显然仍然想看看,在失败时,哪个属性不成立,所以制作一个巨大的属性and并不是最优的。

0 投票
1 回答
687 浏览

haskell - haskell - 使用 QuickCheck 的平均浮点错误

我正在使用 QuickCheck-2.5.1.1 进行质量检查。我正在测试两个纯函数gold :: a -> Floatf :: a -> Float,其中的a实例是任意的。

gold是一个参考计算,f是我正在优化的一个变体。

迄今为止,我使用 quickcheck 的大多数测试都在使用\a -> abs (gold a - f a) < 0.0001.

但是,我想在检查阈值的同时收集统计数据,因为了解平均误差和标准偏差对指导我的设计很有用。

有没有办法使用 QuickCheck 来收集这样的统计数据?


具体例子

举一个我正在寻找的东西的具体例子,假设我有以下两个函数来近似平方根:

对此的测试可能是:

因此,作为测试的副作用,我想知道的是统计数据abs (heron x - maclaurin x)(例如平均值和标准差)。

0 投票
1 回答
438 浏览

haskell - 如何在 DocTest 中使用 ByteStrings 和 QuickTest?

使用 doctest 和 quickcheck 时如何定义Arbitrary实例(如此处所述)?

Doctest 和 Cabal 的设置如此处所述并带有一个单独的测试目录。

doctest 行如下所示:

我在哪里以及如何定义Arbitrary实例,以便 doctest 可以找到它?请注意,我想在测试项目中定义它。

0 投票
3 回答
4696 浏览

testing - QuickCheck:生成平衡样本的嵌套数据结构的任意实例

Arbitrarytl; dr:如果您的数据类型允许太多嵌套,您如何编写不会爆炸的实例?你如何保证这些实例产生你的数据结构的真正随机样本?

我想生成随机树结构,然后在我用我的库代码破坏它们之后测试这些结构的某些属性。(注意:我正在编写子类型算法的实现,即给定类型的层次结构,类型 A 是类型 B 的子类型。这可以任意复杂化,包括对层次结构的多重继承和初始化后更新. 不支持这两种方法的经典方法是舒伯特编号,我知道的最新结果是 Alavi et al. 2008。)

让我们以玫瑰树为例,如下Data.Tree

Arbitray 的一个非常简单(并且不要在家尝试)的实例是:

由于根据类型约束a已经有一个实例,并且将有一个,因为它也是一个实例,这看起来很简单。它不会(通常)由于非常明显的原因而终止:由于它生成的列表任意长,结构变得太大,并且它们很可能不适合内存。甚至更保守的方法:ArbitraryForest[]

出于同样的原因,再次无法正常工作。可以调整 size 参数,以降低列表的长度,但即使这样也不能保证终止,因为它仍然是多个连续的掷骰子,结果可能非常糟糕(我想要奇数节点 100孩子们。)

这意味着我需要限制整个树的大小。这不是那么直截了当。unordered-containers很简单:只需使用fromList. 这在这里并不容易:如何将列表随机变成一棵树,并且不会以某种方式产生偏见(即不支持左分支或非常左倾的树。)

列表中的某种广度优先构造(Data.Tree由列表提供的功能都是预购的)会很棒,我想我可以写一个,但结果证明它不是微不足道的。由于我现在使用的是树,但稍后会使用更复杂的东西,我想我可能会尝试找到一个更通用、更简单的解决方案。有没有,或者我将不得不求助于编写自己的非平凡Arbitrary生成器?在后一种情况下,我实际上可能只是求助于单元测试,因为这看起来工作量太大。

0 投票
3 回答
2076 浏览

haskell - 使用快速检查

我为 foldl 编写了一个实现并想检查它是否有效,我尝试了一些案例,它似乎运行良好,但我想确定一下。

我阅读了有关 quickCheck 并尝试了它,但我似乎无法使其工作,这是代码

当我运行quickCheck test它时会引发以下错误:

0 投票
2 回答
11702 浏览

haskell - 如何生成简单类型的任意实例以进行快速检查

我有一个简单的类型定义:

我不能Cell用作 quickcheck 属性的输入,大概是因为 quickcheck 不知道如何生成 Cell 值。

我的理解是我需要使 Cell 成为类型类的实例Arbitrary

例如,如果我希望使用 x 和 y 的随机正值生成 Cell,我该怎么做?

0 投票
2 回答
385 浏览

haskell - 请提供一个使用 QuickCheck2 的简单测试框架示例

我正在努力让这个基本的测试框架示例与 QuickCheck2 一起使用。由于示例使用 QuickCheck 1,我收到上面页面中提到的以下错误。我假设通常首选使用 QuickCheck2,但是如何将它与测试框架一起使用?

错误:

提前致谢。


如果我导入 Test.Framework.Providers.QuickCheck2,我会收到以下错误:

0 投票
2 回答
5505 浏览

haskell - 关于 Haskell 的 QuickCheck,什么是收缩?

我正在学习 QuickCheck >= 2.6 的技巧,但我不明白收缩是什么。从类型签名来看,收缩看起来更像是扩展!请照亮我:)

0 投票
1 回答
77 浏览

haskell - 为一个类定义一套测试

这个问题涉及到Haskell QuickCheck 最佳实践(尤其是在测试类型类时)停止的地方。

我有一个类和该类的一堆实现。像这样的东西:

我所有的实现都应该满足某个属性。例如:

我想为每个实现测试该属性。我可以做这样的事情。(我正在使用 Test.Framework。)

但就我而言,我有几十个属性要测试,还有十几个类,所以这种方法容易出错,而且很麻烦。(我犯的一个常见错误是剪切和粘贴测试,但忘记更改类型名称,所以我最终为该属性测试 A 两次,而没有测试 B。)

我有一个解决方案,我会在下面发布,以防其他人觉得它有帮助。