#include "test_utils.h" #include "parser.h" #include "lexer.h" #include "sema.h" #include "arena.h" void test_type_error() { Arena a = arena_create(1); size_t tc; ErrorInfo lex_err = {0}; Token* toks = lex(&a, "fn main() { let x: i64 = 1; let y: i64 = x + true; return; }", "test", &tc, &lex_err); ASSERT(toks != NULL); ErrorInfo parse_err = {0}; AstNode* ast = parse(&a, toks, tc, "test", &parse_err); ASSERT(ast != NULL); ErrorList errors; error_init(&errors); sema_analyze(ast, &errors, &a); ASSERT(errors.count > 0); arena_destroy(&a); } void test_undefined_var() { Arena a = arena_create(1); size_t tc; ErrorInfo lex_err = {0}; Token* toks = lex(&a, "fn main() { let x: i64 = y; return; }", "test", &tc, &lex_err); ASSERT(toks != NULL); ErrorInfo parse_err = {0}; AstNode* ast = parse(&a, toks, tc, "test", &parse_err); ASSERT(ast != NULL); ErrorList errors; error_init(&errors); sema_analyze(ast, &errors, &a); ASSERT(errors.count > 0); arena_destroy(&a); } void test_simple_ok() { Arena a = arena_create(1); size_t tc; ErrorInfo lex_err = {0}; Token* toks = lex(&a, "fn main() { let x: i64 = 42; print_i64(x); return; }", "test", &tc, &lex_err); ASSERT(toks != NULL); ErrorInfo parse_err = {0}; AstNode* ast = parse(&a, toks, tc, "test", &parse_err); ASSERT(ast != NULL); ErrorList errors; error_init(&errors); sema_analyze(ast, &errors, &a); ASSERT(errors.count == 0); arena_destroy(&a); } int main(void) { TEST_RUN(test_type_error); TEST_RUN(test_undefined_var); TEST_RUN(test_simple_ok); return test_summary(); }