From 9652903df190ea1725d7082e2e787a7e404fc236 Mon Sep 17 00:00:00 2001 From: Steve Dunham Date: Sat, 21 Mar 2026 09:28:24 -0700 Subject: [PATCH] enable tests on scheme, fix error handling on scheme --- Makefile | 3 +++ prim.ss | 13 ++++++++----- scripts/test | 13 ++++++++----- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 7e5003d..337dca9 100644 --- a/Makefile +++ b/Makefile @@ -34,6 +34,9 @@ newt2.ss: newt.so test: newt.js scripts/test +cheztest: newt.so + make test NEWT='chez --program newt.so' RUNOUT="chez --script" OUTFILE=tmp/out.ss + aoctest: newt.js scripts/aoc scripts/aoc25 diff --git a/prim.ss b/prim.ss index e4a780e..d414b74 100644 --- a/prim.ss +++ b/prim.ss @@ -1,6 +1,3 @@ -;; REVIEW all of this - some of it is IO and needs the IO dance -;; maybe we make a helper? A macro? - ; (define $IORes (lambda (nm-1 nm-2) (vector 0 #f nm-1 nm-2))) (define $IORes (lambda (nm-1 nm-2) (cons nm-1 nm-2))) (define ($Left x) (vector 0 #f #f x)) @@ -17,7 +14,6 @@ (define (Prelude.ltString a b) (stringstring) -(define (Node.exitFailure _ msg) (raise msg)) (define (Prelude.primPutStrLn msg) (lambda (w) (display msg) @@ -73,7 +69,12 @@ (define (Prelude.subInt a b) (- a b)) (define (Prelude.jsEq _ a b) (= a b)) (define (Prelude.divInt a b) (fx/ a b)) -(define (Prelude.fatalError _ msg) (raise msg)) +;; In node this throws and the next one exits cleanly +(define (Prelude.fatalError _ msg) (raise (error #f msg))) +(define (Node.exitFailure _ msg) + (display msg) + (newline) + (exit 1)) (define (Prelude.isSuffixOf sfx s) (let ((n (string-length sfx)) (m (string-length s))) @@ -81,3 +82,5 @@ (string=? sfx (substring s (- m n) m)) #f))) (define (Node.getArgs w) ($IORes (command-line) w)) +(define (Prelude.unsafePerformIO a f) + (car (f 'world))) diff --git a/scripts/test b/scripts/test index 784c053..995ce90 100755 --- a/scripts/test +++ b/scripts/test @@ -1,7 +1,10 @@ #!/bin/sh SAMPLES=$(find playground/samples -name "*.newt") -# NCC="bun run newt.js" -NCC="node newt.js" +# NEWT ="bun run newt.js" +NEWT=${NEWT:="node newt.js"} +OUTFILE=${OUTFILE:="tmp/out.js"} +RUNOUT=${RUNOUT:="node"} +mkdir -p tmp total=0 failed=0 for fn in tests/*.newt ; do @@ -9,10 +12,10 @@ for fn in tests/*.newt ; do echo Test $fn bn=$(basename $fn) if [ -f ${fn}.golden ]; then - $NCC $fn -o out.js > tmp/${bn}.compile + $NEWT $fn -o $OUTFILE > tmp/${bn}.compile else # we've dropped support for compiling things without main for now. - $NCC $fn > tmp/${bn}.compile + $NEWT $fn > tmp/${bn}.compile fi cerr=$? if [ -f ${fn}.fail ]; then @@ -34,7 +37,7 @@ for fn in tests/*.newt ; do fi # if there is a golden file, run the code and compare output if [ -f ${fn}.golden ]; then - node out.js > tmp/${bn}.out + $RUNOUT $OUTFILE > tmp/${bn}.out if [ $? != "0" ]; then echo Run failed for $fn failed=$((failed + 1))