Я хочу написать тесты для набора парсеров Parsec Вот простой пример синтаксического анализатора, который я хочу протестировать с помощью QuickCheck:
identifier = do
c <- letter
cs <- many (alphaNum <|> oneOf identSymbols)
skipSpaces
return $ Ident $ c:cs
Итак, в идеале я хотел бы, чтобы QuickCheck генерировал действительные идентификаторы и гарантировал, что я получаю правильные результаты, а также генерировал недопустимые идентификаторы и удостоверялся, что они возвращают ParseError
. Существуют ли какие-либо утилиты, которые упростили бы подобные вещи? Есть ли способ, которым я могу, так сказать, «запустить свой синтаксический анализатор в обратном порядке», чтобы генерировать такие входные данные?
В В общем, как бы выглядел хороший набор тестов QuickCheck для этого синтаксического анализатора? В какой-то степени кажется, что мне в основном придется дублировать логику синтаксического анализатора в QuickCheck, чтобы получить тщательный тест. Это действительно хорошая идея, или это, возможно, ситуация, когда более традиционный инструмент, такой как HUnit, больше подходит, чем QuickCheck?