#include #include #include static void test_parser_ok(char const* oracle, char const* source) { err_t err; err_init(&err); lexer_t lex; lexer_init(&lex, source, &err); parser_t parser; parser_init(&parser, &lex, &err); node_t* node = parser_try_new_tree(&parser); cr_assert(NULL != node); size_t const SZ = 256; char msg[SZ]; node_str(node, msg, SZ); cr_assert_str_eq(msg, oracle); node_free(node); free(node); parser_free(&parser); lexer_free(&lex); err_free(&err); } static void test_parser_ko(char const* source) { err_t err; err_init(&err); lexer_t lex; lexer_init(&lex, source, &err); parser_t parser; parser_init(&parser, &lex, &err); node_t* node = parser_try_new_tree(&parser); cr_assert(NULL == node); cr_assert_gt(err.size, 0); parser_free(&parser); lexer_free(&lex); err_free(&err); } Test(parser, num) { test_parser_ok("MOD", ""); test_parser_ok("MOD(NUM[37],NUM[29])", "37 29"); test_parser_ko(" ยง "); } Test(parser, bool) { test_parser_ok("MOD(BOOL[true],BOOL[false])", "true false"); }