Что нового в QuickCheck 2?
Каковы основные различия между QuickCheck 1 и QuickCheck 2? Из документов Haddock я вижу, что он разбит на несколько модулей, coarbitrary
был заменен новым Fun
тип и FunArbitrary
класс (который мне кажется более понятным), и тестирование монадического кода теперь поддерживается. Что еще я должен знать?
1 ответ
Я видел одно важное улучшение в QuickCheck 2, я думаю, что оно так же важно, как тестирование монадического кода, если не больше:
class Arbitrary a where
arbitrary :: Gen a
shrink :: a -> [a]
Это действительно круто. Метод сжатия является необязательным, но если вы можете предоставить список "возможно пустых" сокращений вашего типа, то, когда 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))])
С:
FormulaPrim deparsing : *** Failed! Falsifiable (after 2 tests and 3 shrinks):
Poly (Polynome "t" [(CoeffInt 14,PolyRest (CoeffInt 126))])
Более короткий пример неудачи означает более быструю отладку:-)