This once again does NOT compile. I've done work on macros; they don't work yet..

This commit is contained in:
Simon Brooke 2026-03-30 21:49:08 +01:00
parent e3f922a8bf
commit 2b22780ccf
86 changed files with 279 additions and 153 deletions

136
unit-tests/bignum-expt.sh Executable file
View file

@ -0,0 +1,136 @@
#!/bin/bash
result=0
#####################################################################
# last 'smallnum' value:
# sbcl calculates (expt 2 59) => 576460752303423488
expected='576460752303423488'
output=`target/psse 2>/dev/null <<EOF
(progn
(set! expt (lambda
(n x)
(cond
((= x 1) n)
(t (* n (expt n (- x 1)))))))
nil)
(expt 2 59)
EOF`
actual=`echo "$output" | tail -1 | sed 's/\,//g'`
echo -n "$0 => (expt 2 59): "
if [ "${expected}" = "${actual}" ]
then
echo "OK"
else
echo "Fail: expected '${expected}', got '${actual}'"
result=`echo "${result} + 1" | bc`
fi
#####################################################################
# first 'bignum' value (right on the boundary):
# sbcl calculates (expt 2 60) => 1152921504606846976
expected='1152921504606846976'
output=`target/psse 2>/dev/null <<EOF
(progn
(set! expt (lambda
(n x)
(cond
((= x 1) n)
(t (* n (expt n (- x 1)))))))
nil)
(expt 2 60)
EOF`
actual=`echo "$output" | tail -1 | sed 's/\,//g'`
echo -n "$0 => (expt 2 60): "
if [ "${expected}" = "${actual}" ]
then
echo "OK"
else
echo "Fail: expected '${expected}', got '${actual}'"
result=`echo "${result} + 1" | bc`
fi
#####################################################################
# second 'bignum' value (definitely a bignum):
# sbcl calculates (expt 2 61) => 2305843009213693952
expected='2305843009213693952'
output=`target/psse 2>/dev/null <<EOF
(progn
(set! expt (lambda
(n x)
(cond
((= x 1) n)
(t (* n (expt n (- x 1)))))))
nil)
(expt 2 61)
EOF`
actual=`echo "$output" | tail -1 | sed 's/\,//g'`
echo -n "$0 => (expt 2 61): "
if [ "${expected}" = "${actual}" ]
then
echo "OK"
else
echo "Fail: expected '${expected}', got '${actual}'"
result=`echo "${result} + 1" | bc`
fi
# sbcl calculates (expt 2 64) => 18446744073709551616
expected='18446744073709551616'
output=`target/psse 2>/dev/null <<EOF
(progn
(set! expt (lambda
(n x)
(cond
((= x 1) n)
(t (* n (expt n (- x 1)))))))
nil)
(expt 2 64)
EOF`
actual=`echo "$output" | tail -1 | sed 's/\,//g'`
echo -n "$0 => (expt 2 64): "
if [ "${expected}" = "${actual}" ]
then
echo "OK"
else
echo "Fail: expected '${expected}', got '${actual}'"
result=`echo "${result} + 1" | bc`
fi
# sbcl calculates (expt 2 65) => 36893488147419103232
expected='36893488147419103232'
output=`target/psse 2>/dev/null <<EOF
(progn
(set! expt (lambda
(n x)
(cond
((= x 1) n)
(t (* n (expt n (- x 1)))))))
nil)
(expt 2 65)
EOF`
actual=`echo "$output" | tail -1 | sed 's/\,//g'`
echo -n "$0 => (expt 2 65): "
if [ "${expected}" = "${actual}" ]
then
echo "OK"
else
echo "Fail: expected '${expected}', got '${actual}'"
result=`echo "${result} + 1" | bc`
fi
exit ${result}