私はParsecパーサーのテストを書いてみたいです。Haskell - QuickCheckの助けを借りたParsecテスト
data Event = Event { keyEvent :: String }
deriving Show
parseKey :: Parser Event
parseKey = do
char '<'
k <- many1 (letter <|> digit <|> oneOf "_")
char '>'
return $ Event k
私はparse = parse . pretty . parse
プロパティをチェックする必要があることを知っている:ここでは、パーサーとデータ構造の一例です。しかし、どのようにと正しくないテストケースを生成する必要がありますか?一般に、与えられたBNFのテストケースをどのように生成すればよいですか?私はinstance Arbitrary
について知っていますが、それほど助けにはなりません。
この単純なパーサーのジェネレータの例をよくコメントしていただければ幸いです。
正しいテストケースでは、 'id = parse。かなり美味しい? (また、 'oneOf" _ "== char '_'') – huon
私はそれが十分だろうと思う、ええ! (また、最初のバージョンははるかに奇妙でした)。 – m0nhawk
@dbaupp:私はこれについて考えましたが、パーザに 'スペース 'やその他のスキップ可能な文字がある場合の単純な例を考えてみると、結果は異なるでしょう。さらに 'parse'が助けになります。 – m0nhawk