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

testing - 如何为 Haskell 的 quickCheck 函数设置常量种子

每次我运行“quickCheck prop_xyz”时,都会使用一个新的随机种子。如何强制 QuickCheck 始终使用相同的随机种子?

谢谢!

0 投票
1 回答
180 浏览

haskell - QuickCheck 中生成的奇怪字符串

我有一个小型 Parsec 程序,我使用 QuickCheck 脚本进行测试,该脚本并行生成输入文件和预期的解析。

我的测试通常可以很好地运行 100 次测试,但突然间,当我随便测试一些东西时,它们以一个非常大(600,000 个字符)的反例失败了。当我发现错误的来源时,我很困惑:

QuickCheck 显然已经为变量名生成了上述字符串,尽管我在程序中只使用了 alphaNum、下划线和空格。

你能看出为什么会出现上述顺序的任何原因吗?会不会是某个地方的溢出错误?或者 QuickCheck 暂时内存不足并写入调试消息?

0 投票
4 回答
258 浏览

haskell - 使用类型同义词时如何约束 QuickCheck?

QuickCheck用来在我的代码上运行任意测试用例。但是,在我的代码的一部分中,我有类型同义词:

我还有一些函数可以接受多个Vectors 作为输入。但是,所有这些函数都要求Vectors 的长度相同。

有没有办法限制QuickCheck它只生成长度为n的列表?

0 投票
1 回答
3210 浏览

haskell - Haskell 任务的 Makefile 示例

对于典型的 Haskell 任务(如编译、打包、hlint、quickcheck 等),有什么好的 makefile 规则而不是我自己发明的?

在搜索中,我发现类似以下示例的内容:

0 投票
1 回答
659 浏览

haskell - 如何为 Data.MeldableHeap 优先级队列编写 Haskell QuickCheck 生成器

作为一个学习练习,我想编写一个Data.MeldableHeap. 我在以下之后对其进行了图案化:

https://gitorious.org/aocapq/aocapq/source/7f24bb1571b3bd89ada668ea81c37ccdeb825498:src/PriorityQueue/QuickCheck.hs

我的代码:

但这上面得到:

请提供指导。

更新:在您的帮助下,我得到了它:

https://github.com/haroldcarr/learn-haskell-coq-ml-etc/blob/master/haskell/course/coursera-fp-odersky-but-in-haskell/FRP01QuickCheck.hs

实际测试可能会更好,但重点是要学会在一个重要的例子上使用 QuickCheck。谢谢,

0 投票
2 回答
129 浏览

generics - 证明/测试泛型函数的正确性

(这不是关于定理证明,而是关于实践中的测试,例如quickCheck

f一些通用功能

具有一些“理想的”属性(即不是 hack,是不可变的,...)通常是纯 Haskell 泛型函数。

假设我们要测试它,主要问题是

如果我们已经(很好地)为一种特定类型(例如)测试了该函数Int,我们可以假设它对所有类型都是正确的吗?(当然是匹配限制)

(“经过良好测试”我的意思是“所有”功能{domain X properties}都已经过测试)

理论上我们可以确定,但我不确定实例化过程(即编译)中的某些附加属性、限制等是否会产生影响。

谢谢!

注意测试可能使用某些特定类型的属性(例如Int),但这些属性不能是测试属性的一部分。例如,如果Monoid是一个限制,那么关联性可以是测试属性的一部分(但如果不是一个限制,则不是交换性)。

例子

f

0 投票
2 回答
1075 浏览

haskell - QuickCheck 放弃了对递归数据结构(玫瑰树)的调查。

给定一棵任意树,我可以在该树上构建一个子类型关系,使用舒伯特编号:

whereType嵌套原始标签,并额外提供执行子/父(或子类型)检查所需的数据。使用舒伯特编号,两个 Int 参数就足够了。

这导致二元谓词

我现在想用 QuickCheck 测试这确实做了我想做的事情。但是,以下属性不起作用,因为 QuickCheck 只是放弃了:

如果我省略对 的递归调用subtypeSanity,即我传递给的列表的尾部,则conjoin该属性运行良好,但只测试树的根节点!如何在 QuickCheck 不放弃生成新测试用例的情况下递归地进入我的数据结构?

如果需要,我可以提供构建 Schubert Hierarchy 的代码和 的Arbitrary实例Tree (Type a),以提供完整的可运行示例,但这将是相当多的代码。我确信我只是没有“获得”QuickCheck,并且在这里以错误的方式使用它。

编辑:不幸的是,该sized功能似乎并没有消除这里的问题。它最终得到相同的结果(请参阅对 J. Abrahamson 的回答的评论。)

编辑二:我最终通过避免递归步骤来“解决”我的问题,并避免conjoin. 我们只需列出树中所有节点的列表,然后在这些节点上测试单节点属性(从一开始就很好)。

调整树的Arbitrary实例不起作用。这是我仍在使用的任意实例:

我认为这个问题“现在已经解决了”,但是如果有人可以向我解释为什么递归步骤和/或conjoin让 QuickCheck 放弃(在通过“仅”0 个测试之后),我将不胜感激。

0 投票
1 回答
124 浏览

testing - test-framework/quickcheck/cabal:使用 'cabal test' 将选项传递给 testfunction

我正在使用 cabal 使用以下命令构建和测试我的项目:

作为一个框架,我使用测试框架(https://batterseapower.github.io/test-framework/)。一切正常,但是 QuickCheck-tests 的数量默认为 50,这在我的用例中非常少,因为我必须过滤生成的数据以适应某些属性。

有没有可能通过类似的东西

通过 cabal 测试可执行文件?我尝试过类似的事情

但到目前为止还没有运气。有没有可能实现这一目标?

提前谢谢了!

朱尔斯

0 投票
2 回答
4225 浏览

haskell - Haskell quickcheck - 如何只生成可打印的字符串

我有一组对字符串进行编码/解码的简单演示程序,并希望为它们生成一些quickCheck测试,但将测试限制为仅可打印的字符串。由于生成和拒绝的测试用例太多,使用警卫太慢并且失败,所以我想为这个域创建一个安全的生成器。

我看到的对此的引用说(1)为Char定义一个自己的Arbitrary实例并使用它只为字符串生成可打印的字符,或者(2)必须将函数本身包装在一个新类型中并编写一个Arbitrary例如。

但是尝试做(1)它失败了,因为现在在 Test.QuickCheck 中有一个定义,那么如何做到这一点 - 为新类型创建一个safeChar生成器,然后再次必须为测试的函数生成一个适配器? (关于此的 RWH 书籍部分指出,推荐此 DIY Char 定义已过时。)

尝试做(2)似乎我可以只为测试命题添加一个本地化且简单(但失败)的保护,或者编写一个新的包装器和相关的生成器,这看起来更混乱。

显然这很简单(!)并且提供了所有工具,但是有人可以建议这是否是正确的分析,并举例说明如何最好地做到这一点?

0 投票
1 回答
453 浏览

haskell - 快速检查测试失败

我有一组简单的逆函数(简单的移位代码):

他们通过一些简单的手动测试进行了测试,但是 quickCheck 测试报告失败:

但是手动运行同样的测试效果很好:

我不是在问它为什么会失败(这是我要追究的),但是当(看似)相同的手动测试有效时,为什么 quickCheck 会失败?

我怀疑它与字符编码有关,一个解码它,另一个将它视为一个字符串,但不知道为什么。


这个问题是关于测试是如何工作的,而不是(还!)功能或它失败的原因,但这里是代码:

参考:赫顿,2007