QuickCheck 2有哪些新功能?

Ale*_*nov 40 haskell quickcheck

QuickCheck 1和QuickCheck 2有哪些主要区别?通过查看Haddock文档,我可以看到它被拆分为更多模块,coarbitrary已被新Fun类型和FunArbitrary类替换(这对我来说似乎更容易理解),现在支持测试monadic代码.我还应该注意什么?

Rao*_*ter 54

我已经看到了QuickCheck 2的一个重大进步,我认为与monadic代码测试一样重要,如果不是更多:

class Arbitrary  a where
    arbitrary :: Gen a
    shrink :: a -> [a]
Run Code Online (Sandbox Code Playgroud)

真是太棒了.收缩方法是可选的,但是如果您可以提供类型的"可能为空"减少的列表,那么当QuickCheck发现错误检查时,它会尝试通过尝试收缩它然后重新将错误数据减少到最小 - 测试一下 只要它失败,它就会缩小它.

一个小样本来说服你,不缩小:

FormulaPrim deparsing    : *** Failed! Falsifiable (after 4 tests):
Poly (Polynome "p" [(CoeffRatio (26 % 25),PolyRest (CoeffRatio (129 % 40))),(CoeffInt 96,PolyRest (CoeffInt 11)),(CoeffInt 29,PolyRest (CoeffRatio (147 % 121))),(CoeffRatio (62 % 9),PolyRest (CoeffRatio (90 % 43))),(CoeffInt 56,PolyRest (CoeffInt 27))])
Run Code Online (Sandbox Code Playgroud)

用:

FormulaPrim deparsing    : *** Failed! Falsifiable (after 2 tests and 3 shrinks):
Poly (Polynome "t" [(CoeffInt 14,PolyRest (CoeffInt 126))])
Run Code Online (Sandbox Code Playgroud)

更短的失败示例意味着更快的调试:-)

  • 我整个星期都见过最酷的黑客. (4认同)