#include #include #include static void test_lexer_ok(char const* oracle, char const* source) { lexer_t lex; lexer_init(&lex, source, NULL); node_t* tok = lexer_try_new_next(&lex); cr_assert(tok != NULL); size_t const SZ = 512; char str[SZ]; node_str(tok, str, SZ); cr_assert_str_eq(str, oracle); node_free(tok); lexer_free(&lex); } static void test_lexer_ko(char const* source) { lexer_t lex; err_t err; err_init(&err); lexer_init(&lex, source, &err); node_t* tok = lexer_try_new_next(&lex); cr_assert(tok == NULL); cr_assert(err.size > 0); err_free(&err); lexer_free(&lex); } static void test_lexer(char const* source, size_t n, ...) { va_list lst; va_start(lst, n); lexer_t lexer; lexer_init(&lexer, source, NULL); for (size_t i=0; i