Подтвердить что ты не робот

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

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

4b9b3361

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

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