Что нового в 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))])

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

Другие вопросы по тегам