我想爲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:我想過這個,不,考慮一下簡單的例子,當分析器中有'spaces'或其他可跳過的字符時,那麼產生的結果會不同。另外'parse'會有幫助。 – m0nhawk