问题标签 [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 回答
188 浏览

quickcheck - scalacheck 添加了哪些功能而不是 quickcheck?

所有 scalacheck 的东西都说:

此后发展并扩展了 Haskell QuickCheck 中没有的功能

那么,这些功能是什么?

0 投票
2 回答
435 浏览

testing - 如何防止 QuickCheck 捕获所有异常?

QuickCheck 库似乎可以捕获测试属性时引发的所有异常。特别是,这种行为使我无法对整个 QuickCheck 计算设置时间限制。例如:

因为 QuickCheck 捕获了所有异常,timeout所以中断:它实际上并没有中止计算!相反,QuickCheck 将属性视为失败,并尝试缩小导致失败的输入。然后,这个收缩过程不以时间限制运行,导致计算使用的总时间超过规定的时间限制。

有人可能认为我可以使用 QuickCheck 的within组合器来限制计算时间。(within如果属性没有在给定的时间限制内完成,则将其视为失败。)但是,within并不能完全满足我的要求,因为 QuickCheck 仍会尝试缩小导致失败的输入,这个过程可能需要很长时间太长。(或者对我有用的是一个版本,within它可以防止 QuickCheck 尝试将输入缩小到一个失败的属性,因为它没有在给定的时间限制内完成。)

如何防止 QuickCheck 捕获所有异常?

0 投票
2 回答
1383 浏览

haskell - 如何使用 QuickCheck 测试高阶函数?

我有一个要测试的高阶函数,我要测试的属性之一是它对传入的函数的作用。为了说明,这里是一个人为的例子:

这个想法大致是这是一个示例生成器。我将从一个 single 开始a,创建一个 的单例列表[a],然后创建一个新的列表,[a]直到谓词告诉我停止。调用可能如下所示:

在哪里

这是我要测试的属性:

在任何对 的调用中gen init next stopgen承诺永远不会将空列表传递给next.

我可以使用 QuickCheck 测试此属性吗?如果可以,如何测试?

0 投票
3 回答
1296 浏览

haskell - 简单的随机数生成

经过一段时间令人沮丧的研究后,我正在写这篇文章,我希望这里有人可以启发我这个话题。

我想在 haskell 函数中生成一个简单的随机数,但是,如果没有各种重要的元素,例如 Monad、“do”中的分配、创建生成器等,这似乎是不可能的。

理想情况下,我正在寻找相当于 C 的“rand()”。但是经过大量搜索后,我非常确信没有这样的东西,因为语言是如何设计的。(如果有,请有人赐教)。由于这似乎不可行,我想找到一种方法来为我的特定问题获取随机数,以及如何获取随机数的一般解释。

我正在尝试掌握 QuickCheck,但我无法使用随机数使其变得困难。我已经尝试过这样的事情(通过放置一个drawInt 0(长度xs2)而不是RANDOMNUMBERHERE)但我坚持认为需要一个Int并且该方法给我留下了一个IO Int,这似乎不可能转换为int依此

0 投票
1 回答
133 浏览

haskell - 从 DiffArray 移动到 Data.Vector 时的内存泄漏

在将数据结构从diffarray 更改vector之后,在 QuickCheck测试之一期间内存会爆炸(无限增长)。

代码托管在GitHub 上。dev 分支包含不良代码,而 master 分支运行良好。除了微小的更改之外,唯一可能对此产生任何影响的提交就是这个。为了运行 QuickCheck 例程,应该运行可执行测试器。看起来小长度的向量不会使程序崩溃,但是当它变得更长时,程序会变慢并最终炸毁内存。让我感兴趣的另一件事是,在渲染 XML 文件时,我在其他库中遇到了类似的问题。对于小文件(<400k),它运行缓慢但没有崩溃,对于较大的文件,内存会爆炸。Data.Vector 也包含在该库中。我有直觉这些问题是相关的。

编辑:我终于隔离了重现内存泄漏的代码部分,并将其放入一个文件中,可以在此处找到。现在我正在使用与 DiffArray 一样好用的 IArray。要在 IArray 和 Vector 之间切换,必须修改第 49、93 和 101 行。

0 投票
2 回答
420 浏览

testing - 是否有与 QuickCheck 一起使用的 Arbitrary 的一元版本?

当我想测试纯代码时,QuickCheck我经常需要编写一个Arbitrary实例。要测试一元代码,我可以Test.QuickCheck.Monadic按照本文所述使用。

我的问题是:是否有一些规范的方法来生成取决于一元上下文的数据?特别是,是否有一些 Arbitrary 的 monadic 版本?您将如何生成需要一元上下文的数据?

0 投票
1 回答
4269 浏览

haskell - 控制如何在 QuickCheck 中生成测试数据

我编写了一个算法来解决 Haskell 中的子集和问题。签名是

QuickCheck 似乎非常适合测试它。例如,我在这里是我可以检查的属性之一:

问题是该算法的计算量非常大,并且运行 100 个带有大输入列表的测试需要很长时间才能运行。

我尝试使用 QuickCheck 1,它确实运行得很快,但用于测试的数据集非常小。转移到 QuickCheck 2 后,它似乎是相反的问题。有一本 QC 手册,但它似乎很旧(没有日期信息),我不知道还有多少适用于 QC2。Haskell Wiki 上提供了一个教程,但没有太多细节,只是关于实例化的几句话Arbitrary

所以我有两个问题:

  • QuickCheck 2 的哪些变化使它变得比 QuickCheck 慢得多?
  • 控制数据集创建以使其对给定测试有用的最佳方法是什么?

编辑:更具体地说,我想测试我的解决方案,列表大小从 0 到 100,包含 -10000 到 10000 之间的整数。

0 投票
2 回答
570 浏览

haskell - 自动收集所有快速检查

作为 quickCheck 的粉丝,我有很多

在我的整个程序中。

为方便起见,为了轻松运行所有这些,我定义

但是有没有一种很好的生成方法runchecks

TL;DR:我想轻松运行文件中的所有快速检查。我想一种方法是在可运行的测试前面加上 test_ 或类似的东西,但这可能太老套了。

0 投票
1 回答
329 浏览

haskell - 如何轻松使 Data.List.Vector 成为 Arbitrary 的成员?

我在我的程序中使用 Data.List.Vector,现在我想使用 quickCheck。但是,没有这样的例子。由于 [Double] 已经是任意的,我想我可以做类似的事情

唉,GHC 根本不喜欢这样:

我想我也可以只创建一堆接受 [Double] 并使用 V.fromList 的属性,但这似乎很乏味。

0 投票
3 回答
411 浏览

haskell - 使用 QuickCheck 进行 Haskell 矩阵测试

我正在 Haskell 中创建一个 Matrix 模块,我想使用 QuickCheck 来测试我的代码的一些属性。具体来说,我想生成具有关联逆的随机矩阵。以下是我尝试创建生成此类矩阵的 QuickCheck 生成器。

该代码首先创建一个介于 2 到 10 之间的大小,然后创建一个由该大小的向量组成的向量。如果行列式为零,则矩阵不可逆,因此我递归调用 invertibleMatrix。否则我返回新矩阵。

问题是,当我把它放在一个属性中进行测试时,这段代码并没有终止。(我认为它不断创建相同的 sxs 零元素矩阵,显然没有逆矩阵,因此它进入了无限循环)。我究竟做错了什么?我该如何解决?谢谢。

标记