From db58f43065c3b397754bb9efcb4a7376b2538131 Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Fri, 23 Oct 2026 20:47:43 -0400 Subject: pit: Add tests, fix binding bug --- pit/src/native.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'pit/src/native.c') diff --git a/pit/src/native.c b/pit/src/native.c index 7d61a50..e776f38 100644 --- a/pit/src/native.c +++ b/pit/src/native.c @@ -188,6 +188,17 @@ static pit_value impl_diagnostics(pit_runtime *rt, pit_value args, void *data) { fprintf(stderr, "value allocs: %ld\n", rt->heap->next); return PIT_NIL; } +static pit_value impl_assert(pit_runtime *rt, pit_value args, void *data) { + (void) data; + pit_value msg = pit_value_cons_car(rt, args); args = pit_value_cons_cdr(rt, args); + pit_value expected = pit_value_cons_car(rt, args); args = pit_value_cons_cdr(rt, args); + pit_value actual = pit_value_cons_car(rt, args); args = pit_value_cons_cdr(rt, args); + if (!pit_value_equal(rt, expected, actual)) { + pit_fprintf(rt, stderr, "assertion %v failed!\nexpected: %v\nactual: %v\n", msg, expected, actual); + exit(1); + } + return actual; +} static pit_value impl_print(pit_runtime *rt, pit_value args, void *data) { (void) data; pit_value x = pit_value_cons_car(rt, args); @@ -259,6 +270,7 @@ void pit_install_library_io(pit_runtime *rt) { pit_symtab_set(rt, pit_symtab_intern_cstr(rt, "*load-path*"), load_path); /* diagnostics */ pit_symtab_fset(rt, pit_symtab_intern_cstr(rt, "diagnostics!"), pit_value_nativefunc_new(rt, impl_diagnostics)); + pit_symtab_fset(rt, pit_symtab_intern_cstr(rt, "assert!"), pit_value_nativefunc_new(rt, impl_assert)); /* stream IO */ pit_symtab_fset(rt, pit_symtab_intern_cstr(rt, "print!"), pit_value_nativefunc_new(rt, impl_print)); pit_symtab_fset(rt, pit_symtab_intern_cstr(rt, "princ!"), pit_value_nativefunc_new(rt, impl_princ)); -- cgit v1.3.1