问题标签 [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.
quickcheck - scalacheck 添加了哪些功能而不是 quickcheck?
所有 scalacheck 的东西都说:
此后发展并扩展了 Haskell QuickCheck 中没有的功能
那么,这些功能是什么?
testing - 如何防止 QuickCheck 捕获所有异常?
QuickCheck 库似乎可以捕获测试属性时引发的所有异常。特别是,这种行为使我无法对整个 QuickCheck 计算设置时间限制。例如:
因为 QuickCheck 捕获了所有异常,timeout
所以中断:它实际上并没有中止计算!相反,QuickCheck 将属性视为失败,并尝试缩小导致失败的输入。然后,这个收缩过程不以时间限制运行,导致计算使用的总时间超过规定的时间限制。
有人可能认为我可以使用 QuickCheck 的within
组合器来限制计算时间。(within
如果属性没有在给定的时间限制内完成,则将其视为失败。)但是,within
并不能完全满足我的要求,因为 QuickCheck 仍会尝试缩小导致失败的输入,这个过程可能需要很长时间太长。(或者对我有用的是一个版本,within
它可以防止 QuickCheck 尝试将输入缩小到一个失败的属性,因为它没有在给定的时间限制内完成。)
如何防止 QuickCheck 捕获所有异常?
haskell - 如何使用 QuickCheck 测试高阶函数?
我有一个要测试的高阶函数,我要测试的属性之一是它对传入的函数的作用。为了说明,这里是一个人为的例子:
这个想法大致是这是一个示例生成器。我将从一个 single 开始a
,创建一个 的单例列表[a]
,然后创建一个新的列表,[a]
直到谓词告诉我停止。调用可能如下所示:
在哪里
这是我要测试的属性:
在任何对 的调用中
gen init next stop
,gen
承诺永远不会将空列表传递给next
.
我可以使用 QuickCheck 测试此属性吗?如果可以,如何测试?
haskell - 简单的随机数生成
经过一段时间令人沮丧的研究后,我正在写这篇文章,我希望这里有人可以启发我这个话题。
我想在 haskell 函数中生成一个简单的随机数,但是,如果没有各种重要的元素,例如 Monad、“do”中的分配、创建生成器等,这似乎是不可能的。
理想情况下,我正在寻找相当于 C 的“rand()”。但是经过大量搜索后,我非常确信没有这样的东西,因为语言是如何设计的。(如果有,请有人赐教)。由于这似乎不可行,我想找到一种方法来为我的特定问题获取随机数,以及如何获取随机数的一般解释。
我正在尝试掌握 QuickCheck,但我无法使用随机数使其变得困难。我已经尝试过这样的事情(通过放置一个drawInt 0(长度xs2)而不是RANDOMNUMBERHERE)但我坚持认为需要一个Int并且该方法给我留下了一个IO Int,这似乎不可能转换为int依此。
haskell - 从 DiffArray 移动到 Data.Vector 时的内存泄漏
在将数据结构从diffarray 更改为vector之后,在 QuickCheck测试之一期间内存会爆炸(无限增长)。
代码托管在GitHub 上。dev 分支包含不良代码,而 master 分支运行良好。除了微小的更改之外,唯一可能对此产生任何影响的提交就是这个。为了运行 QuickCheck 例程,应该运行可执行测试器。看起来小长度的向量不会使程序崩溃,但是当它变得更长时,程序会变慢并最终炸毁内存。让我感兴趣的另一件事是,在渲染 XML 文件时,我在其他库中遇到了类似的问题。对于小文件(<400k),它运行缓慢但没有崩溃,对于较大的文件,内存会爆炸。Data.Vector 也包含在该库中。我有直觉这些问题是相关的。
编辑:我终于隔离了重现内存泄漏的代码部分,并将其放入一个文件中,可以在此处找到。现在我正在使用与 DiffArray 一样好用的 IArray。要在 IArray 和 Vector 之间切换,必须修改第 49、93 和 101 行。
testing - 是否有与 QuickCheck 一起使用的 Arbitrary 的一元版本?
当我想测试纯代码时,QuickCheck
我经常需要编写一个Arbitrary
实例。要测试一元代码,我可以Test.QuickCheck.Monadic
按照本文所述使用。
我的问题是:是否有一些规范的方法来生成取决于一元上下文的数据?特别是,是否有一些 Arbitrary 的 monadic 版本?您将如何生成需要一元上下文的数据?
haskell - 控制如何在 QuickCheck 中生成测试数据
我编写了一个算法来解决 Haskell 中的子集和问题。签名是
QuickCheck 似乎非常适合测试它。例如,我在这里是我可以检查的属性之一:
问题是该算法的计算量非常大,并且运行 100 个带有大输入列表的测试需要很长时间才能运行。
我尝试使用 QuickCheck 1,它确实运行得很快,但用于测试的数据集非常小。转移到 QuickCheck 2 后,它似乎是相反的问题。有一本 QC 手册,但它似乎很旧(没有日期信息),我不知道还有多少适用于 QC2。Haskell Wiki 上提供了一个教程,但没有太多细节,只是关于实例化的几句话Arbitrary
。
所以我有两个问题:
- QuickCheck 2 的哪些变化使它变得比 QuickCheck 慢得多?
- 控制数据集创建以使其对给定测试有用的最佳方法是什么?
编辑:更具体地说,我想测试我的解决方案,列表大小从 0 到 100,包含 -10000 到 10000 之间的整数。
haskell - 自动收集所有快速检查
作为 quickCheck 的粉丝,我有很多
在我的整个程序中。
为方便起见,为了轻松运行所有这些,我定义
但是有没有一种很好的生成方法runchecks
?
TL;DR:我想轻松运行文件中的所有快速检查。我想一种方法是在可运行的测试前面加上 test_ 或类似的东西,但这可能太老套了。
haskell - 如何轻松使 Data.List.Vector 成为 Arbitrary 的成员?
我在我的程序中使用 Data.List.Vector,现在我想使用 quickCheck。但是,没有这样的例子。由于 [Double] 已经是任意的,我想我可以做类似的事情
唉,GHC 根本不喜欢这样:
我想我也可以只创建一堆接受 [Double] 并使用 V.fromList 的属性,但这似乎很乏味。
haskell - 使用 QuickCheck 进行 Haskell 矩阵测试
我正在 Haskell 中创建一个 Matrix 模块,我想使用 QuickCheck 来测试我的代码的一些属性。具体来说,我想生成具有关联逆的随机矩阵。以下是我尝试创建生成此类矩阵的 QuickCheck 生成器。
该代码首先创建一个介于 2 到 10 之间的大小,然后创建一个由该大小的向量组成的向量。如果行列式为零,则矩阵不可逆,因此我递归调用 invertibleMatrix。否则我返回新矩阵。
问题是,当我把它放在一个属性中进行测试时,这段代码并没有终止。(我认为它不断创建相同的 sxs 零元素矩阵,显然没有逆矩阵,因此它进入了无限循环)。我究竟做错了什么?我该如何解决?谢谢。
标记