Когда тест 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