Каковы основные отличия между 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))])
Более короткий пример отказа означает более быструю отладку: -)