パーセルパーサーのテスト用のテストを作成したいと思います。ここで私はQuickCheckをテストしたいパーサの簡単な例です:だからQuickCheckで入力を生成してパーセルパーサーをテストする
identifier = do
c <- letter
cs <- many (alphaNum <|> oneOf identSymbols)
skipSpaces
return $ Ident $ c:cs
は、理想的に、私はQuickCheckは、有効な識別子を生成し、私は戻って右の結果を得るだけでなく、無効な識別子を生成することを確認したいと思います彼らがParseError
を返すことを確認してください。このようなことを楽にするユーティリティはありますか?そのような入力を生成するために、言い換えれば、私のパーサーを逆に実行する方法がありますか?
一般に、このパーサーのQuickCheckテストの優れたスイートはどのように見えますか?ある程度までは、徹底的なテストを達成するために、基本的にQuickCheckのパーサのロジックを複製する必要があるようです。これは本当に良いアイデアか、おそらくHUnitのような従来のツールがQuickCheckよりも適している状況でしょうか?
私が使いたい特定のプロパティは、parse = parseです。かなり。解析する。これは、パーサーによる情報の商のモデル化のためのまともな方法として役立ちます。理論的な観点からそれを駆動するための素敵な補助機能があります。 parseは恒等関数でなければ冪等である。 (通常、解析によって一部の情報が破棄されます) –
最後の2つのリンクが死んでいます –