我正在尝试在一些嵌套列表上运行 QuickCheck,如下所示:
type Constraint = Text
data Value = Value [Constraint]
data Literal = Literal Value [Value]
type Formula = [Literal]
所以一个公式是一个文字列表,每个文字都包含一个谓词和一些参数;谓词/参数是字符串形式的约束的析取值。这给了我们一个列表列表的列表,唷!
如果我的 QuickCheck 属性之一失败,我往往会得到一页难以理解的输出。在尝试收缩之前,我曾经通过使用只能生成一小组(小)值的任意实例来解决这个问题。为我的每种类型实现收缩功能似乎有点帮助,但没有我想要的那么多。我仍然得到一页输出。
我认为我想要收缩的是一个小的文字列表,其中每个文字都有一个小的值列表,而这些值又很少有约束,每个约束都尽可能短。但在我目前的努力中,这些列表中至少有一个变得足够大,以至于输出变得可怕。如果我尝试调整我的收缩实现,我还会发现 QC 开始花费很长时间(搜索收缩?),这会阻碍我有效收缩的努力。
当您有这样的嵌套数据时,您如何提高理解 QuickCheck 失败的机会?