From 8f63364c2b1ec54e104c189db43805917800b789 Mon Sep 17 00:00:00 2001 From: sanine Date: Mon, 27 Oct 2025 10:52:01 -0500 Subject: implement basic grammatical expansion --- expression.test.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 expression.test.c (limited to 'expression.test.c') diff --git a/expression.test.c b/expression.test.c new file mode 100644 index 0000000..234347d --- /dev/null +++ b/expression.test.c @@ -0,0 +1,61 @@ +#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; +} -- cgit v1.2.1