私は一連の Parsec パーサーのテストを書きたいと思っています。QuickCheck でテストしたいパーサーの簡単な例を次に示します。
identifier = do
c <- letter
cs <- many (alphaNum <|> oneOf identSymbols)
skipSpaces
return $ Ident $ c:cs
したがって、理想的には、QuickCheck が有効な識別子を生成し、正しい結果が返されるようにし、無効な識別子を生成してParseError
. この種のことを簡単にするユーティリティはありますか? そのような入力を生成するために、いわば「パーサーを逆に実行する」方法はありますか?
一般に、このパーサーの QuickCheck テストの適切なスイートはどのようなものでしょうか? ある程度、徹底的なテストを行うには、QuickCheck のパーサーのロジックを基本的に複製する必要があるように思えます。それは本当に良い考えですか、それとも、これはおそらく HUnit のような従来のツールが QuickCheck よりも適している状況ですか?