#define LILY_IMPLEMENTATION #include "lily-test.h" #include "expression.h" LILY_FILE_BEGIN(expression_suite) enum simple_symbol_t { START, SIMPLE_NUM_NONTERMINALS, A, B, C, }; LILY_TEST("expand basic expression") { li_grammar_t *grammar = li_grammar_alloc(SIMPLE_NUM_NONTERMINALS); REQUIRE_NEQ(grammar, NULL, "%p"); int err; int rule0[] = { A, START, B }; err = li_grammar_rule_add(grammar, START, 3, rule0); CHECK_EQ(err, 0, "%d"); int rule1[] = { C }; err = li_grammar_rule_add(grammar, START, 1, rule1); CHECK_EQ(err, 0, "%d"); int buf[32]; size_t bufsz = 32; int stack[32]; uint8_t rand[] = { 1, 1, 1, 0 }; err = li_grammar_rule_expand(grammar, buf, &bufsz, stack, 32, START, rand, 4); REQUIRE_EQ(err, 0, "%d"); CHECK_EQ(bufsz, 7, "%lu"); CHECK_EQ(buf[0], A, "%d"); CHECK_EQ(buf[1], A, "%d"); CHECK_EQ(buf[2], A, "%d"); CHECK_EQ(buf[3], C, "%d"); CHECK_EQ(buf[4], B, "%d"); CHECK_EQ(buf[5], B, "%d"); CHECK_EQ(buf[6], B, "%d"); li_grammar_free(grammar); } #include LILY_PUSH_TEST() #define LILY_FILE_END #include LILY_REGISTER_TESTS() int main() { lily_begin(); expression_suite(); lily_finish(); return 0; }