O que há de novo no Quickcheck 2?
-
20-09-2019 - |
Pergunta
Quais são as principais diferenças entre o QuickCheck 1 e o QuickCheck 2? Ao olhar para os documentos de haddock, posso ver que está dividido em mais módulos, coarbitrary
foi substituído pelo novo Fun
tipo e FunArbitrary
classe (que parece mais fácil de entender para mim) e testar o código Monadic agora é suportado. O que mais devo estar ciente?
Solução
Eu já vi um grande avanço no Quickcheck 2, acho importante como o teste de código monádico, se não mais:
class Arbitrary a where
arbitrary :: Gen a
shrink :: a -> [a]
Isto é verdade incrível. O método de encolhimento é opcional, mas se você puder fornecer uma lista de redução "possivelmente vazia" do seu tipo, quando o QuickCheck encontrar uma verificação defeituosa, ele tentará reduzir seus dados defeituosos ao mínimo, tentando encolhê -lo e depois re - -teste-o. A encolher, desde que falhe.
Uma pequena amostra para convencê -lo, sem diminuir:
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))])
Com :
FormulaPrim deparsing : *** Failed! Falsifiable (after 2 tests and 3 shrinks):
Poly (Polynome "t" [(CoeffInt 14,PolyRest (CoeffInt 126))])
Exemplo de falha mais curta significa depuração mais rápida :-)