Me gustaría escribir pruebas para un conjunto de analizadores Parsec. Aquí está un ejemplo simple de un analizador quiero probar con QuickCheck:Prueba de analizadores Parsec generando entradas con QuickCheck
identifier = do
c <- letter
cs <- many (alphaNum <|> oneOf identSymbols)
skipSpaces
return $ Ident $ c:cs
Así, idealmente, me gustaría QuickCheck para generar identificadores válidos y asegúrese de que tenga los resultados Derecha, así como la generación de identificadores no válidos y asegurándose de que devuelvan ParseError
. ¿Hay utilidades que facilitarían este tipo de cosas? ¿Hay alguna manera en que pueda "ejecutar mi analizador en reversa", por así decirlo, para generar tales entradas?
En general, ¿cómo sería un buen conjunto de pruebas de QuickCheck para este analizador? Hasta cierto punto, parece que básicamente tendría que duplicar la lógica del analizador en QuickCheck para lograr una prueba exhaustiva. ¿Es realmente una buena idea, o quizás una situación en la que una herramienta más tradicional como HUnit es más adecuada que QuickCheck?
Una propiedad particular que me gusta usar es que parse = analizar. bonita . analizar gramaticalmente. Esto sirve como una forma decente de modelar la asignación de información por parte del analizador sintáctico, hay una buena adición para conducirlo desde una perspectiva teórica, y captura el hecho de que es bonito. el análisis es idempotente, si no la función de identidad. (Por lo general, el análisis descarta cierta información) –
últimos dos enlaces están muertos –