问题标签 [smallcheck]

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 回答
157 浏览

haskell - 泛型系列生成无限列表

有了这个片段,还有 smallcheck-1.0.1

那么这个

生成一个明显无限的列表。

在 smallcheck-0.6.1 只生成 [A,B] 之前我认为是等价的,这正是我所期望的。

这是对 smallcheck 系列的有意更改吗?如果是,是否有一种简单的方法可以恢复 0.6.1 的行为。

这里有可编译的程序来演示这一点:http: //hpaste.org/83927

0 投票
3 回答
1845 浏览

testing - 如何在 Haskell 中使用 SmallCheck?

我正在尝试使用SmallCheck来测试 Haskell 程序,但我无法理解如何使用该库来测试我自己的数据类型。显然,我需要使用Test.SmallCheck.Series。但是,我发现它的文档非常混乱。我对食谱风格的解决方案和逻辑(单子?)结构的可理解解释都感兴趣。这是我的一些问题(所有相关的):

  • 如果我有一个数据类型data Person = SnowWhite | Dwarf Integer,我该如何解释smallCheck有效值是Dwarf 1通过Dwarf 7(或SnowWhite)?如果我有一个复杂的FairyTale数据结构和一个构造函数makeTale :: [Person] -> FairyTale,并且我想smallCheck使用构造函数从 Person-s 列表中制作 FairyTale-s 怎么办?

    通过 quickCheck使用Control.Monad.liftM诸如makeTale. 我想不出一种方法来做到这一点smallCheck(请向我解释一下!)。

  • Serial类型,Series等之间有什么关系?

  • (可选)有什么意义coSeries?如何使用Positive来自的类型SmallCheck.Series

  • (可选)任何关于什么是一元表达式背后的逻辑的说明,以及在 smallCheck 的上下文中什么只是一个常规函数,将不胜感激。

如果有任何使用介绍/教程smallCheck,我会很感激一个链接。非常感谢!

更新:我应该补充一点,我找到的最有用和可读的文档smallCheck这篇论文 (PDF)。乍一看,我找不到问题的答案;它更像是一个有说服力的广告,而不是一个教程。

更新 2:我将关于Identity出现在 typeTest.SmallCheck.list和其他地方的怪异的问题移到了一个单独的 question

0 投票
1 回答
268 浏览

testing - 为什么smallCheck的`Series`类在构造函数中有两种类型?

这个问题与我关于班级的其他问题有关。当我尝试以以下自然方式定义类的实例时(@tel 对上述问题的回答向我建议),我得到编译器错误:smallCheckTest.SmallCheck.SeriesSerial

事实证明,Serial想要有两个论点。反过来,这需要一些编译器标志。以下作品:

我的问题是:

  1. 把它放在Identity那里是“正确的做法”吗?我受到Test.Series.list函数类型的启发(当我第一次看到它时我也觉得非常奇怪):

    什么是正确的做法?Identity每次看到就盲目的放进去会好吗?我应该放一些类似的东西Serial m Integer => Serial m Person(这需要一些看起来更可怕的编译器标志:FlexibleContexts至少UndecidableInstances)?

  2. 第一个参数(min Serial m n)是做什么用的?

    谢谢!

0 投票
2 回答
178 浏览

testing - 如何在 SmallCheck 中使用一元属性?

我想写一个使用 IO 的 SmallCheck 属性,但我不知道应该怎么做。具体来说,目标是编写一个属性,它是 的一个实例,Testable IO Bool以便我可以将它输入smallCheck(或testProperty输入test-framework)。不幸的是,我能想到的最好的方法如下:

这不起作用,因为它是Testable IO (IO Bool)而不是的实例Testable IO Bool,但我不知道如何重写它以使其工作。

任何帮助,将不胜感激。

0 投票
2 回答
404 浏览

haskell - smallcheck 中的 `Depth` 参数应该控制多少?

我正在做我的第一次真正的工作smallcheck,我对如何使用这个Depth参数有点困惑。在我开始之前,让我先说明我smallcheck的用途。

在工作中,我们正在我们自己的内部数据库前面构建一个简单的 Web 服务。Web 服务执行一些查询,并以序列化为 JSON 的查询结果进行响应。我目前正在做的是保证:给定一个表示查询结果的对象,该对象会产生预期的 JSON。例如:

必须生成 JSON,例如:

这看起来像是一个理想的任务smallcheck,我将其表述如下:

框架中的默认smallcheck深度tasty是 5,这导致我还没有看到完成的测试运行。smallcheck具有changeDepthandchangeDepth1功能,因此我可以使用它们changeDepth (const 3)来确保我的测试始终在合理的时间内运行。但是,通过这样做,我不禁觉得我在某个地方错过了重点?例如,现在不可能通过仅更改命令行选项来运行测试来运行更长的测试,可能在一夜之间。另一方面,如果我使用changeDepth (- 2),它仍然感觉好像我在假设测试是如何运行的!也许最好假设 5 的全局测试深度在n秒内运行,并且由每个属性来调整它认为合适的深度?

希望听到一些关于smallcheck.

0 投票
1 回答
255 浏览

testing - SmallCheck:制作类型类 Serial 的类型实例

我试图弄清楚如何将 smallcheck 基于属性的测试库与美味结合使用。

我遇到了多字段记录类型的问题:如何使用类型类的 4 个以上字段成员创建记录Serial类型?

我认为这将是正常的方法:

这有效,当然“Test1”失败了。但是,此方法不适用于具有超过 4 个字段的记录类型,因为该consN函数仅定义为最多采用 4 个参数。这是声明函数的模块的链接。Test.SmallCheck.Series

对于类似的东西:

添加它的方法是什么Serial?我尝试使用这样的泛型:

但 ghc 拒绝接受上述示例,并显示以下消息:

提前谢谢了!

朱尔斯

0 投票
2 回答
415 浏览

testing - Haskell / SmallCheck:如何控制“深度”参数?

我有一个简单的数据结构可以在 smallcheck 中进行测试。

运行测试时,是否有任何通用解决方案来设置(单个)测试的参数,或者更好的是,为单个字段Depth设置参数的细粒度解决方案,例如将深度限制为 2 以避免搜索的组合爆炸空间?Depthp3

提前谢谢了!

朱尔斯

信息:一个有点相关的问题是here

编辑:我采用了Roman Cheplyaka
接受的答案中给出的解决方案,并在一个最小的工作示例中实现了它们(感谢 Roman):

0 投票
1 回答
260 浏览

unit-testing - 基于属性的异常测试

我正在为我当地的函数式编程小组写一篇关于 Haskell 的介绍。作为基础,我正在使用 Tasty-testing 框架,并且我想测试 indexing function (!!)

MinimalExample.hs

MinimalTests.hs

测试不应“索引太大”而失败,因为错误/异常是相同的。

测试应该因负输入而失败 - 这可以通过添加NonNegative作为输入的约束或在myIndex-function 中添加相应的子句来解决。

0 投票
1 回答
211 浏览

haskell - symdiff 做了什么(在 haskell 中)

我应该填写一些东西undefined来编译和测试程序。我真的不知道这里的 symdiff 应该做什么,所以我不知道我可以填写什么undefined。有人可以给我一个提示,我可以插入undefined什么吗?

顺便说一句,当我想用​​ ghci 7.6.3 编译代码时出现错误: Could not find module 'Test.SmallCheck.Series'我该如何解决?

这是代码:

谢谢,这有很大帮助!那这个呢:

这些行是否正确(除了带有???的行,我已经在考虑了)

这适用于最后一行: S y' -> symdiff x' y'

0 投票
2 回答
71 浏览

haskell - SmallCheck 生成满足不变量的数据

我想使用 SmallCheck 来测试我的代码。我设法生成了任意的整数对列表,但这不是我的类型应该包含的内容。该列表表示一组范围,其中[1,3),[4,6)将被编码/存储为[(1,3),(4,6)].

这些是我的范围的标准化形式的不变量:

我想将此传达给 SmallCheck,以便它不会生成大量我丢弃的值,因为它们不满足我的不变量,但也许这是不可能的。

如何生成满足我的不变量的列表?