#include #include #include #include static void test_lexer(char const* source, size_t size, ...) { va_list lst; va_start(lst, size); struct vec tokens; vec_init(&tokens, 1); struct lexer lex; lexer_init(&lex, source); int err = lexer_extract(&lex, &tokens); cr_assert_eq(0, err, "%s", lex.error_msg); cr_assert_eq(size, tokens.size, "size (%zu) != tokens.size (%zu)", size, tokens.size); for (size_t i=0; i>=<<=", 4, "GT", "GE", "LT", "LE"); } Test(lexer, var_decl) { test_lexer(":=var", 3, "COLON", "ASSIGN", "VAR"); } Test(lexer, ident) { test_lexer("atrue salut! coucou32 az_za?", 4, "IDENT[atrue]", "IDENT[salut!]", "IDENT[coucou32]", "IDENT[az_za?]"); } Test(lexer, var_types) { test_lexer("int float bool string", 4, "TYPE[int]", "TYPE[float]", "TYPE[bool]", "TYPE[string]"); } Test(lexer, blocks) { test_lexer("{}", 2, "OBRACE", "CBRACE"); } Test(lexer, flow_control) { test_lexer("if else cond while for", 5, "IF", "ELSE", "COND", "WHILE", "FOR"); }