Воссоздание ошибочного входного значения для QuickCheck из начального числа - PullRequest
0 голосов
/ 27 сентября 2018

Когда тест QuickCheck не проходит, иногда мне нужно пройтись по коду в ghci (или стеку), чтобы проанализировать проблему.Поэтому первое, что я делаю, это восстанавливаю ошибочный ввод.Теперь QuickCheck распечатывает ошибочный ввод (используя Show), но иногда воссоздать ввод из этого сложно или невозможно.Например, рассматриваемый тип может не реализовывать Read.Или это может быть действительно сложный тип, который требует много типов для его воссоздания, и отслеживание модулей, экспортирующих эти типы, и ручной импорт их в repl - сложная задача.

ТакЯ хотел бы иметь возможность воссоздать ошибочный ввод из начального числа , о котором также сообщает QuickCheck.Похоже, что unGen в Test.QuickCheck.Gen предназначен для этого.

unGen :: QCGen -> Int -> a

Запустите генератор на определенном семени.Если вы просто хотите получить случайное значение, рассмотрите возможность использования generate.

Но unGen принимает два входных параметра.Я предполагаю, что второе семя.Как мне воссоздать параметр QCGen?Вот пример, который я пробовал, где семя было -4346962096583255693.unGen не похоже на негативное семя, поэтому я, должно быть, делаю что-то не так.

λ> (unGen arbitrary) (mkQCGen 0) (-4346962096583255693) :: ImprintEmptyBrainTestData 
ImprintEmptyBrainTestData (*** Exception: Negative exponent

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Существует также пакет quickcheck-with-counterexamples , где свойства могут захватывать сгенерированные значения для дальнейшей проверки в случае сбоя теста.

0 голосов
/ 27 сентября 2018

Вы должны использовать quickCheckResult (или quickCheckWithResult) для запуска ваших тестов.Если возвращается Failure, поля usedSeed и usedSize содержат значения QCGen и Int, которые необходимо передать в Args в quickCheckWith.

...