【发布时间】:2018-09-27 16:51:58
【问题描述】:
当 QuickCheck 测试失败时,有时我需要遍历 ghci(或 stack repl)中的代码来分析问题。所以我做的第一件事就是重新创建失败的输入。现在 QuickCheck 会打印出失败的输入(使用 Show),但有时很难或不可能从中重新创建输入。例如,有问题的类型可能不实现Read。或者它可能是一个非常复杂的类型,需要大量类型才能重新创建它,并且跟踪导出这些类型的模块,然后手动将它们导入 repl 是一件麻烦事。
所以我希望能够从种子中重新创建失败的输入,QuickCheck 也报告了这一点。看起来 Test.QuickCheck.Gen 中的 unGen 就是为此而设计的。
unGen :: QCGen -> Int -> a在特定种子上运行生成器。如果你只是想获得一个 随机值出来,考虑使用generate。
但是unGen 需要两个输入参数。我猜第二个是种子。如何重新创建 QCGen 参数?这是我尝试的一个示例,其中种子为-4346962096583255693。 unGen 似乎不喜欢负种子,所以我一定是做错了什么。
λ> (unGen arbitrary) (mkQCGen 0) (-4346962096583255693) :: ImprintEmptyBrainTestData
ImprintEmptyBrainTestData (*** Exception: Negative exponent
【问题讨论】:
标签: haskell quickcheck