Forked from
Hammer / hammer
318 commits behind the upstream repository.
-
Dan Hirsch authored
t_grammar.c 1.13 KiB
#include <glib.h>
#include "hammer.h"
#include "internal.h"
#include "cfgrammar.h"
#include "test_suite.h"
static void test_end(void) {
const HParser *p = h_end_p();
HCFGrammar *g = h_cfgrammar(&system_allocator, p);
g_check_hashtable_size(g->nts, 1);
g_check_hashtable_size(g->geneps, 0);
g_check_derives_epsilon_not(g, p);
}
static void test_example_1(void) {
HParser *c = h_many(h_ch('x'));
HParser *q = h_sequence(c, h_ch('y'), NULL);
HParser *p = h_choice(q, h_end_p(), NULL);
HCFGrammar *g = h_cfgrammar(&system_allocator, p);
g_check_nonterminal(g, c);
g_check_nonterminal(g, q);
g_check_nonterminal(g, p);
g_check_derives_epsilon(g, c);
g_check_derives_epsilon_not(g, q);
g_check_derives_epsilon_not(g, p);
g_check_firstset_present(1, g, p, "$");
g_check_firstset_present(1, g, p, "x");
g_check_firstset_present(1, g, p, "y");
g_check_followset_absent(1, g, c, "$");
g_check_followset_absent(1, g, c, "x");
g_check_followset_present(1, g, c, "y");
}
void register_grammar_tests(void) {
g_test_add_func("/core/grammar/end", test_end);
g_test_add_func("/core/grammar/example_1", test_example_1);
}