#!/bin/sh
set -e
# I like MzScheme for its diagnostics:
: ${refscheme:="mzscheme -r"}
# But ELK is the fastest of bigloo, guile, mzscheme, SCM, and ELK for
# this purpose:
# : ${refscheme:="elk -l"}
# you can run with urscheme=urscheme-compiler instead
: ${urscheme:="$refscheme compiler.scm"}
status='echo ERROR: FAILED'
trap '/bin/rm -f refscheme.out newcompiler.out runtest.s runtest; $status' EXIT
ulimit -s 1024         # to make the tailcall test run reasonably fast
runtest () {
        prog="${1?runtest needs an argument}"
        echo "running $prog"
        $refscheme "$prog" > refscheme.out
        $urscheme < "$prog" > runtest.s
        gcc -nostdlib runtest.s -o runtest
        ./runtest > newcompiler.out
        diff -au refscheme.out newcompiler.out
}
if [ $# -eq 0 ] ; then set test.*.scm; fi
for test in "$@"; do runtest "$test"; done
status='echo PASSED'