diff options
Diffstat (limited to 'src/test/check_grammar.c')
-rw-r--r-- | src/test/check_grammar.c | 51 |
1 files changed, 46 insertions, 5 deletions
diff --git a/src/test/check_grammar.c b/src/test/check_grammar.c index 1fe27dd..39f66ee 100644 --- a/src/test/check_grammar.c +++ b/src/test/check_grammar.c @@ -2,7 +2,8 @@ #include <stdlib.h> #include "../grammar.h" -int main(U_ATTR int argc, U_ATTR char **argv) +int +main(U_ATTR int argc, U_ATTR char **argv) { /* check new_tnt and print it */ TNT *tnt = new_tnt(1, 12); @@ -24,12 +25,52 @@ int main(U_ATTR int argc, U_ATTR char **argv) } /* check new_rule, print_rule, and destroy_rule. */ - + Rule *rule = new_rule(1, tnt_string); - + print_rule(rule); - - destroy_rule(rule); + + destroy_rule(rule, 1); + + /* check build_grammar, print_grammar, and destroy_grammar */ + + List *rules = new_list(); + List *names = new_list(); + + + for (int i = 0; i < 3; i++) { + tnt_string = new_tnt_string("ntn", 3, + (NT) 3*(i+1), + (T) 3*(i+1)*(i+1), + (NT) 3*(i+1)*(i+1)-2); + + if (!tnt_string) { + eprintf("i = %d, cannot create tnt string\n", i); + + map_list(rules, destroy_rule_and_free_all); + + destroy_list(rules, 0); + destroy_list(names, 1); + return 1; + } + + rule = new_rule(i, tnt_string); + add_to_list(rules, rule); + + char *name = MYALLOC(char, 7); + snprintf(name, 7, "Rule %d", i); + add_to_list(names, name); + } + + Grammar *g = new_grammar(); + + build_grammar(g, rules, names); + + print_grammar(g); + + destroy_grammar(g, 1); + + free(g); return 0; } |