Added mode option to regex and also changed example from a line reader to a tokenizer.
This commit is contained in:
29
tests/core.c
29
tests/core.c
@@ -154,7 +154,7 @@ void test_copy(void) {
|
||||
|
||||
static int line_count = 0;
|
||||
|
||||
static void* read_line(void* line) {
|
||||
static mpc_val_t* read_line(mpc_val_t* line) {
|
||||
line_count++;
|
||||
return line;
|
||||
}
|
||||
@@ -185,6 +185,32 @@ void test_reader(void) {
|
||||
|
||||
}
|
||||
|
||||
static int token_count = 0;
|
||||
|
||||
static mpc_val_t *print_token(mpc_val_t *x) {
|
||||
printf("Token: '%s'\n", (char*)x);
|
||||
token_count++;
|
||||
return x;
|
||||
}
|
||||
|
||||
void test_tokens(void) {
|
||||
|
||||
mpc_parser_t* Tokens = mpc_many(
|
||||
mpcf_strfold,
|
||||
mpc_apply(mpc_strip(mpc_re("\\s*([a-zA-Z_]+|[0-9]+|,|\\.|:)")), print_token));
|
||||
|
||||
token_count = 0;
|
||||
|
||||
PT_ASSERT(mpc_test_pass(Tokens,
|
||||
" hello 4352 , \n foo.bar \n\n test:ing ",
|
||||
"hello4352,foo.bartest:ing", streq, free, strprint));
|
||||
|
||||
PT_ASSERT(token_count == 9);
|
||||
|
||||
mpc_delete(Tokens);
|
||||
|
||||
}
|
||||
|
||||
void test_eoi(void) {
|
||||
|
||||
mpc_parser_t* Line = mpc_re("[^\\n]*$");
|
||||
@@ -203,5 +229,6 @@ void suite_core(void) {
|
||||
pt_add_test(test_repeat, "Test Repeat", "Suite Core");
|
||||
pt_add_test(test_copy, "Test Copy", "Suite Core");
|
||||
pt_add_test(test_reader, "Test Reader", "Suite Core");
|
||||
pt_add_test(test_tokens, "Test Tokens", "Suite Core");
|
||||
pt_add_test(test_eoi, "Test EOI", "Suite Core");
|
||||
}
|
||||
|
@@ -162,7 +162,9 @@ void test_partial(void) {
|
||||
(int(*)(const void*,const void*))mpc_ast_eq,
|
||||
(mpc_dtor_t)mpc_ast_delete,
|
||||
(void(*)(const void*))mpc_ast_print));
|
||||
|
||||
|
||||
mpc_ast_delete(t0);
|
||||
|
||||
mpc_cleanup(5, Line, Number, QuotedString, LinePragma, Parser);
|
||||
|
||||
}
|
||||
@@ -248,6 +250,8 @@ void test_qscript(void) {
|
||||
(mpc_dtor_t)mpc_ast_delete,
|
||||
(void(*)(const void*))mpc_ast_print));
|
||||
|
||||
mpc_ast_delete(t0);
|
||||
|
||||
mpc_cleanup(18, Qscript, Comment, Resource, Rtype, Rname, InnerBlock,
|
||||
Statement, Function, Parameter, Literal, Block, Seperator, Qstring,
|
||||
SimpleStr, ComplexStr, Number, Float, Int);
|
||||
@@ -278,6 +282,61 @@ void test_missingrule(void) {
|
||||
|
||||
}
|
||||
|
||||
void test_regex_mode(void) {
|
||||
|
||||
mpc_parser_t *Line0, *Line1, *Line2, *Line3;
|
||||
mpc_ast_t *t0, *t1, *t2, *t3, *t4;
|
||||
|
||||
Line0 = mpc_new("line0");
|
||||
Line1 = mpc_new("line1");
|
||||
Line2 = mpc_new("line2");
|
||||
Line3 = mpc_new("line3");
|
||||
|
||||
mpca_lang(MPCA_LANG_DEFAULT, " line0 : /.*/; ", Line0);
|
||||
mpca_lang(MPCA_LANG_DEFAULT, " line1 : /.*/s; ", Line1);
|
||||
mpca_lang(MPCA_LANG_DEFAULT, " line2 : /(^[a-z]*$)*/; ", Line2);
|
||||
mpca_lang(MPCA_LANG_DEFAULT, " line3 : /(^[a-z]*$)*/m; ", Line3);
|
||||
|
||||
t0 = mpc_ast_new("regex", "blah");
|
||||
t1 = mpc_ast_new("regex", "blah\nblah");
|
||||
t2 = mpc_ast_new("regex", "");
|
||||
t3 = mpc_ast_new("regex", "blah");
|
||||
t4 = mpc_ast_new("regex", "blah\nblah");
|
||||
|
||||
PT_ASSERT(mpc_test_pass(Line0, "blah\nblah", t0,
|
||||
(int(*)(const void*,const void*))mpc_ast_eq,
|
||||
(mpc_dtor_t)mpc_ast_delete,
|
||||
(void(*)(const void*))mpc_ast_print));
|
||||
|
||||
PT_ASSERT(mpc_test_pass(Line1, "blah\nblah", t1,
|
||||
(int(*)(const void*,const void*))mpc_ast_eq,
|
||||
(mpc_dtor_t)mpc_ast_delete,
|
||||
(void(*)(const void*))mpc_ast_print));
|
||||
|
||||
PT_ASSERT(mpc_test_pass(Line2, "blah\nblah", t2,
|
||||
(int(*)(const void*,const void*))mpc_ast_eq,
|
||||
(mpc_dtor_t)mpc_ast_delete,
|
||||
(void(*)(const void*))mpc_ast_print));
|
||||
|
||||
PT_ASSERT(mpc_test_pass(Line2, "blah", t3,
|
||||
(int(*)(const void*,const void*))mpc_ast_eq,
|
||||
(mpc_dtor_t)mpc_ast_delete,
|
||||
(void(*)(const void*))mpc_ast_print));
|
||||
|
||||
PT_ASSERT(mpc_test_pass(Line3, "blah\nblah", t4,
|
||||
(int(*)(const void*,const void*))mpc_ast_eq,
|
||||
(mpc_dtor_t)mpc_ast_delete,
|
||||
(void(*)(const void*))mpc_ast_print));
|
||||
|
||||
mpc_ast_delete(t0);
|
||||
mpc_ast_delete(t1);
|
||||
mpc_ast_delete(t2);
|
||||
mpc_ast_delete(t3);
|
||||
mpc_ast_delete(t4);
|
||||
|
||||
mpc_cleanup(4, Line0, Line1, Line2, Line3);
|
||||
}
|
||||
|
||||
void suite_grammar(void) {
|
||||
pt_add_test(test_grammar, "Test Grammar", "Suite Grammar");
|
||||
pt_add_test(test_language, "Test Language", "Suite Grammar");
|
||||
@@ -286,4 +345,5 @@ void suite_grammar(void) {
|
||||
pt_add_test(test_partial, "Test Partial", "Suite Grammar");
|
||||
pt_add_test(test_qscript, "Test QScript", "Suite Grammar");
|
||||
pt_add_test(test_missingrule, "Test Missing Rule", "Suite Grammar");
|
||||
pt_add_test(test_regex_mode, "Test Regex Mode", "Suite Grammar");
|
||||
}
|
||||
|
@@ -132,6 +132,43 @@ void test_regex_newline(void) {
|
||||
|
||||
}
|
||||
|
||||
void test_regex_multiline(void) {
|
||||
|
||||
mpc_parser_t *re0 = mpc_re_mode("(^[a-z]*$)*", MPC_RE_MULTILINE);
|
||||
|
||||
PT_ASSERT(regex_test_pass(re0, "hello\nhello", "hello\nhello"));
|
||||
PT_ASSERT(regex_test_pass(re0, "hello\nhello\n", "hello\nhello\n"));
|
||||
PT_ASSERT(regex_test_pass(re0, "\nblah\n\nblah\n", "\nblah\n\nblah\n"));
|
||||
PT_ASSERT(regex_test_fail(re0, "45234", "45234"));
|
||||
PT_ASSERT(regex_test_fail(re0, "\n45234", "\n45234"));
|
||||
PT_ASSERT(regex_test_pass(re0, "\n45234", "\n"));
|
||||
|
||||
mpc_delete(re0);
|
||||
|
||||
}
|
||||
|
||||
void test_regex_dotall(void) {
|
||||
|
||||
mpc_parser_t *re0 = mpc_re_mode("^.*$", MPC_RE_DEFAULT);
|
||||
mpc_parser_t *re1 = mpc_re_mode("^.*$", MPC_RE_DOTALL);
|
||||
|
||||
PT_ASSERT(regex_test_pass(re0, "hello", "hello"));
|
||||
PT_ASSERT(regex_test_fail(re0, "hello\n", "hello"));
|
||||
PT_ASSERT(regex_test_fail(re0, "he\nllo\n", "he"));
|
||||
PT_ASSERT(regex_test_pass(re0, "34njaksdklmasd", "34njaksdklmasd"));
|
||||
PT_ASSERT(regex_test_fail(re0, "34njaksd\nklmasd", "34njaksd"));
|
||||
|
||||
PT_ASSERT(regex_test_pass(re1, "hello", "hello"));
|
||||
PT_ASSERT(regex_test_pass(re1, "hello\n", "hello\n"));
|
||||
PT_ASSERT(regex_test_pass(re1, "he\nllo\n", "he\nllo\n"));
|
||||
PT_ASSERT(regex_test_pass(re1, "34njaksdklmasd", "34njaksdklmasd"));
|
||||
PT_ASSERT(regex_test_pass(re1, "34njaksd\nklmasd", "34njaksd\nklmasd"));
|
||||
|
||||
mpc_delete(re0);
|
||||
mpc_delete(re1);
|
||||
|
||||
}
|
||||
|
||||
void suite_regex(void) {
|
||||
pt_add_test(test_regex_basic, "Test Regex Basic", "Suite Regex");
|
||||
pt_add_test(test_regex_range, "Test Regex Range", "Suite Regex");
|
||||
@@ -139,4 +176,6 @@ void suite_regex(void) {
|
||||
pt_add_test(test_regex_lisp_comment, "Test Regex Lisp Comment", "Suite Regex");
|
||||
pt_add_test(test_regex_boundary, "Test Regex Boundary", "Suite Regex");
|
||||
pt_add_test(test_regex_newline, "Test Regex Newline", "Suite Regex");
|
||||
pt_add_test(test_regex_multiline, "Test Regex Multiline", "Suite Regex");
|
||||
pt_add_test(test_regex_dotall, "Test Regex Dotall", "Suite Regex");
|
||||
}
|
||||
|
Reference in New Issue
Block a user