Что нового в QuickCheck 2?

Каковы основные различия между QuickCheck 1 и QuickCheck 2? Глядя на документы Haddock, я вижу, что он разделен на несколько модулей, coarbitrary был заменен новым типом Fun и классом FunArbitrary (что мне кажется более понятным), и теперь поддерживается тестирование монадического кода. Что еще я должен знать?


person Alexey Romanov    schedule 19.12.2009    source источник


Ответы (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))])

Более короткий пример сбоя означает более быструю отладку :-)

person Raoul Supercopter    schedule 19.12.2009
comment
Самый крутой взлом, который я видел за всю неделю. - person Jason Orendorff; 20.12.2009