libtest.sh
#!/bin/sh
# Scheme 9 from Empty Space
# By Nils M Holm, 2008-2012
# Generate Library Test Suite
testfile=util/libtest.scm
trap '
cleanup
exit 1
' 1 2 3 15
cleanup() {
rm -f $testfile
}
cat >$testfile <<EOT
; Automatically generated test suite,
; See libtest.sh for details.
(load-from-library "syntax-rules.scm")
(define Errors 0)
(define (check src expr result)
; (write src) (display " ==> ") (write expr) (newline)
(if (not (equal? expr result))
(begin (write src)
(display " FAILED!")
(newline)
(display "Expected: ")
(write result)
(newline)
(display "But got: ")
(write expr)
(newline)
(set! Errors (+ 1 Errors)))))
(define-syntax %test
(syntax-rules (==>)
((_) #t)
((_ expr ==> result)
(check 'expr expr 'result))
((_ expr ==> result . more)
(begin (check 'expr expr 'result)
(%test . more)))))
EOT
cases="lib/*.scm contrib/*.scm"
if echo '*extensions*' | ./s9 -i ./test.image | grep sys-unix >/dev/null; then
cases="$cases ext/unix/*.scm"
fi
for f in $cases; do
if grep '^; Example: ' $f >/dev/null 2>&1; then
# echo "(display \"$f\") (newline)" >>$testfile
echo "(load-from-library \"`basename $f`\")" >>$testfile
if grep '^; Given: ' $f >/dev/null 2>&1; then
sed -ne '/^; Given: /,/^;$/p' <$f | \
sed -e '/^$/d' | \
sed -e 's/^;............//' >>$testfile
echo "" >>$testfile
fi
echo "(%test" >>$testfile
sed -ne '/^; Example: /,/^$/p' <$f | \
sed -e '/^$/d' | \
sed -e 's/^;..........//' >>$testfile
echo ")" >>$testfile
echo "" >>$testfile
fi
done
cat >>$testfile <<EOT
(if (= 0 Errors)
(begin (display "Everything fine!")
(newline)))
EOT
trap '
exit 1
' 1 2 3 15
export S9FES_LIBRARY_PATH
./s9 -i ./test.image $testfile