问题标签 [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.
haskell - 泛型系列生成无限列表
有了这个片段,还有 smallcheck-1.0.1
那么这个
生成一个明显无限的列表。
在 smallcheck-0.6.1 只生成 [A,B] 之前我认为是等价的,这正是我所期望的。
这是对 smallcheck 系列的有意更改吗?如果是,是否有一种简单的方法可以恢复 0.6.1 的行为。
这里有可编译的程序来演示这一点:http: //hpaste.org/83927
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。
testing - 为什么smallCheck的`Series`类在构造函数中有两种类型?
这个问题与我关于班级的其他问题有关。当我尝试以以下自然方式定义类的实例时(@tel 对上述问题的回答向我建议),我得到编译器错误:smallCheck
Test.SmallCheck.Series
Serial
事实证明,Serial
想要有两个论点。反过来,这需要一些编译器标志。以下作品:
我的问题是:
把它放在
Identity
那里是“正确的做法”吗?我受到Test.Series.list
函数类型的启发(当我第一次看到它时我也觉得非常奇怪):什么是正确的做法?
Identity
每次看到就盲目的放进去会好吗?我应该放一些类似的东西Serial m Integer => Serial m Person
(这需要一些看起来更可怕的编译器标志:FlexibleContexts
至少UndecidableInstances
)?第一个参数(
m
inSerial m n
)是做什么用的?谢谢!
testing - 如何在 SmallCheck 中使用一元属性?
我想写一个使用 IO 的 SmallCheck 属性,但我不知道应该怎么做。具体来说,目标是编写一个属性,它是 的一个实例,Testable IO Bool
以便我可以将它输入smallCheck
(或testProperty
输入test-framework
)。不幸的是,我能想到的最好的方法如下:
这不起作用,因为它是Testable IO (IO Bool)
而不是的实例Testable IO Bool
,但我不知道如何重写它以使其工作。
任何帮助,将不胜感激。
haskell - smallcheck 中的 `Depth` 参数应该控制多少?
我正在做我的第一次真正的工作smallcheck
,我对如何使用这个Depth
参数有点困惑。在我开始之前,让我先说明我smallcheck
的用途。
在工作中,我们正在我们自己的内部数据库前面构建一个简单的 Web 服务。Web 服务执行一些查询,并以序列化为 JSON 的查询结果进行响应。我目前正在做的是保证:给定一个表示查询结果的对象,该对象会产生预期的 JSON。例如:
必须生成 JSON,例如:
这看起来像是一个理想的任务smallcheck
,我将其表述如下:
框架中的默认smallcheck
深度tasty
是 5,这导致我还没有看到完成的测试运行。smallcheck
具有changeDepth
andchangeDepth1
功能,因此我可以使用它们changeDepth (const 3)
来确保我的测试始终在合理的时间内运行。但是,通过这样做,我不禁觉得我在某个地方错过了重点?例如,现在不可能通过仅更改命令行选项来运行测试来运行更长的测试,可能在一夜之间。另一方面,如果我使用changeDepth (- 2)
,它仍然感觉好像我在假设测试是如何运行的!也许最好假设 5 的全局测试深度在n秒内运行,并且由每个属性来调整它认为合适的深度?
希望听到一些关于smallcheck
.
testing - SmallCheck:制作类型类 Serial 的类型实例
我试图弄清楚如何将 smallcheck 基于属性的测试库与美味结合使用。
我遇到了多字段记录类型的问题:如何使用类型类的 4 个以上字段成员创建记录Serial
类型?
我认为这将是正常的方法:
这有效,当然“Test1”失败了。但是,此方法不适用于具有超过 4 个字段的记录类型,因为该consN
函数仅定义为最多采用 4 个参数。这是声明函数的模块的链接。Test.SmallCheck.Series
对于类似的东西:
添加它的方法是什么Serial
?我尝试使用这样的泛型:
但 ghc 拒绝接受上述示例,并显示以下消息:
提前谢谢了!
朱尔斯
testing - Haskell / SmallCheck:如何控制“深度”参数?
我有一个简单的数据结构可以在 smallcheck 中进行测试。
运行测试时,是否有任何通用解决方案来设置(单个)测试的参数,或者更好的是,为单个字段Depth
设置参数的细粒度解决方案,例如将深度限制为 2 以避免搜索的组合爆炸空间?Depth
p3
提前谢谢了!
朱尔斯
信息:一个有点相关的问题是here。
编辑:我采用了Roman Cheplyaka
接受的答案中给出的解决方案,并在一个最小的工作示例中实现了它们(感谢 Roman):
unit-testing - 基于属性的异常测试
我正在为我当地的函数式编程小组写一篇关于 Haskell 的介绍。作为基础,我正在使用 Tasty-testing 框架,并且我想测试 indexing function (!!)
。
MinimalExample.hs
MinimalTests.hs
测试不应因“索引太大”而失败,因为错误/异常是相同的。
测试应该因负输入而失败 - 这可以通过添加NonNegative
作为输入的约束或在myIndex
-function 中添加相应的子句来解决。
- 我可以在基于属性的测试中测试异常吗?
- 或者我是否必须使用 (H) 单元测试,如如何在 Haskell 中测试错误?或Haskell 异常和单元测试,在这种情况下,我如何选择从 0 到生成的测试列表长度范围内的索引。
haskell - symdiff 做了什么(在 haskell 中)
我应该填写一些东西undefined
来编译和测试程序。我真的不知道这里的 symdiff 应该做什么,所以我不知道我可以填写什么undefined
。有人可以给我一个提示,我可以插入undefined
什么吗?
顺便说一句,当我想用 ghci 7.6.3 编译代码时出现错误:
Could not find module 'Test.SmallCheck.Series'
我该如何解决?
这是代码:
谢谢,这有很大帮助!那这个呢:
这些行是否正确(除了带有???的行,我已经在考虑了)
这适用于最后一行:
S y' -> symdiff x' y'
haskell - SmallCheck 生成满足不变量的数据
我想使用 SmallCheck 来测试我的代码。我设法生成了任意的整数对列表,但这不是我的类型应该包含的内容。该列表表示一组范围,其中[1,3),[4,6)
将被编码/存储为[(1,3),(4,6)]
.
这些是我的范围的标准化形式的不变量:
我想将此传达给 SmallCheck,以便它不会生成大量我丢弃的值,因为它们不满足我的不变量,但也许这是不可能的。
如何生成满足我的不变量的列表?