Каковы основные различия между QuickCheck 1 и QuickCheck 2? Глядя на документы Haddock, я вижу, что он разделен на несколько модулей, coarbitrary
был заменен новым типом Fun
и классом FunArbitrary
(что мне кажется более понятным), и теперь поддерживается тестирование монадического кода. Что еще я должен знать?
Что нового в QuickCheck 2?
Ответы (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
Самый крутой взлом, который я видел за всю неделю.
- person Jason Orendorff; 20.12.2009