Added test for partial grammar definition

This commit is contained in:
Daniel Holden
2016-06-11 12:59:55 +01:00
parent 5f9863ffcd
commit 14001ad332
2 changed files with 42 additions and 2 deletions

4
mpc.c
View File

@@ -2095,7 +2095,7 @@ static mpc_val_t *mpcf_re_range(mpc_val_t *x) {
for (j = start; j <= end; j++) {
range = realloc(range, strlen(range) + 1 + 1 + 1);
range[strlen(range) + 1] = '\0';
range[strlen(range) + 0] = j;
range[strlen(range) + 0] = (char)j;
}
}
}
@@ -2217,7 +2217,7 @@ mpc_val_t *mpcf_oct(mpc_val_t *x) {
mpc_val_t *mpcf_float(mpc_val_t *x) {
float *y = malloc(sizeof(float));
*y = strtod(x, NULL);
*y = strtof(x, NULL);
free(x);
return y;
}

View File

@@ -128,9 +128,49 @@ void test_doge(void) {
}
void test_partial(void) {
mpc_ast_t *t0;
mpc_err_t *err;
mpc_parser_t *Line = mpc_new("line");
mpc_parser_t *Number = mpc_new("number");
mpc_parser_t *QuotedString = mpc_new("quoted_string");
mpc_parser_t *LinePragma = mpc_new("linepragma");
mpc_parser_t *Parser = mpc_new("parser");
mpc_define(Line, mpca_tag(mpc_apply(mpc_sym("#line"), mpcf_str_ast), "string"));
err = mpca_lang(MPCA_LANG_PREDICTIVE,
"number : /[0-9]+/ ;\n"
"quoted_string : /\"(\\.|[^\"])*\"/ ;\n"
"linepragma : <line> <number> <quoted_string>;\n"
"parser : /^/ (<linepragma>)* /$/ ;\n",
Line, Number, QuotedString, LinePragma, Parser, NULL);
PT_ASSERT(err == NULL);
t0 = mpc_ast_build(3, ">",
mpc_ast_new("regex", ""),
mpc_ast_build(3, "linepragma|>",
mpc_ast_new("line|string", "#line"),
mpc_ast_new("number|regex", "10"),
mpc_ast_new("quoted_string|regex", "\"test\"")),
mpc_ast_new("regex", ""));
PT_ASSERT(mpc_test_pass(Parser, "#line 10 \"test\"", t0,
(int(*)(const void*,const void*))mpc_ast_eq,
(mpc_dtor_t)mpc_ast_delete,
(void(*)(const void*))mpc_ast_print));
mpc_cleanup(5, Line, Number, QuotedString, LinePragma, Parser);
}
void suite_grammar(void) {
pt_add_test(test_grammar, "Test Grammar", "Suite Grammar");
pt_add_test(test_language, "Test Language", "Suite Grammar");
pt_add_test(test_language_file, "Test Language File", "Suite Grammar");
pt_add_test(test_doge, "Test Doge", "Suite Grammar");
pt_add_test(test_partial, "Test Partial", "Suite Grammar");
}