kow*_*wey 31 haskell quickcheck
我试图在一些嵌套列表上运行QuickCheck,看起来像这样:
type Constraint = Text
data Value = Value [Constraint]
data Literal = Literal Value [Value]
type Formula = [Literal]
所以公式是一个文字列表,每个文字都包含一个谓词和一些参数; 谓词/参数是每个字符串形式的约束分离的值.这给了我们一份列表清单列表,p!
如果我的一个QuickCheck属性失败,我倾向于得到一个难以理解的页面输出.在尝试收缩之前,我曾经通过使用只能生成一小组(小)值的任意实例来解决这个问题.为我的每个类型实现收缩功能似乎有点帮助,但没有我想要的那么多.我仍然得到一页输出.
我认为我想要收缩的是一个小文字列表,其中每个文字都有一个小的值列表,而这些值又有很少的约束,每个约束都尽可能短.但在我目前的努力中,至少这些列表变得足够大,使输出变得可怕.如果我尝试调整缩小实现,我也发现QC开始花费很长时间(寻找收缩?),这会削弱我有效收缩的努力.
当您嵌套这样的数据时,如何提高理解QuickCheck失败的几率?
我有一个类似的问题,但我使用的是 C 和自制的示例生成器:) 我有缓慢而正确的实现,以及快速但不正确的实现。
使用随机示例,当您发现不正确的示例时,我建议缩小示例本身。(当然,这可以或应该通过程序来完成,而不是通过计算机来完成)
如果您有此测试的谓词,并且有不起作用的示例,请尝试消除所有顺序的列表中的元素(这应该是调用数量级的线性顺序)以及每次尝试(如果测试失败)。
如果仍然失败,则没有理由将其保留在示例中。
如果它开始通过,那么该元素应该保留在简化示例中。
(这是贪婪的并且不是最优的,但它确实以多边形执行,而不是指数时间,并且它对我有用)
为了更科学地看待,我建议阅读《程序为何失败:系统调试指南》一书中的“简化问题”一章。
注意:这主要是收缩的作用......
| 归档时间: | 
 | 
| 查看次数: | 1195 次 | 
| 最近记录: |