Новые функции и возможности в QuickCheck 2?

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

40
задан Alexey Romanov 19 December 2009 в 16:01
поделиться

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))])

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

54
ответ дан 27 November 2019 в 01:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: