我正在尝试在某些嵌套列表上运行QuickCheck,如下所示:

type Constraint = Text
data Value = Value [Constraint]
data Literal = Literal Value [Value]
type Formula = [Literal]

因此,公式是文字列表,每个文字包含一个谓词和一些参数。谓词/自变量是值,它们分别是字符串形式的约束的析取。这给了我们列表列表列表,!

如果我的QuickCheck属性之一失败了,我往往会得到难以理解的页面输出。在尝试收缩之前,我曾经通过拥有只能生成一小组(小)值的任意实例来解决此问题。为我的每种类型实现shrink函数似乎有一点帮助,但并没有达到我想要的程度。我仍然得到一整页的输出。

我认为我想从收缩中获得的只是一小部分文字,其中每个文字都有一小部分值,而这些值又有很少的约束,每个约束都尽可能短。但是在我目前的努力中,至少这些列表的规模足以使输出变得可怕。如果我尝试调整收缩的实现,我还会发现QC开始花费很长时间(寻找收缩吗?),这阻碍了我有效收缩的努力。

像这样嵌套数据时,如何提高理解QuickCheck故障的机会?

最佳答案

FWIW,看看https://github.com/leepike/SmartCheck,它声称比通常用手工完成的收缩更好。

关于haskell - 如何从QuickCheck中缩小(缩小)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8788542/

10-11 08:46