tests: add Forth tests
Modest first step
This commit is contained in:
parent
b335e538b4
commit
f0cbda1f2e
@ -8,9 +8,13 @@
|
||||
// in sync with glue.asm
|
||||
#define RAMSTART 0x900
|
||||
#define STDIO_PORT 0x00
|
||||
// This binary is also used for automated tests and those tests, when
|
||||
// failing, send a non-zero value to RET_PORT to indicate failure
|
||||
#define RET_PORT 0x01
|
||||
|
||||
static int running;
|
||||
static FILE *fp;
|
||||
static int retcode = 0;
|
||||
|
||||
static uint8_t iord_stdio()
|
||||
{
|
||||
@ -30,6 +34,12 @@ static void iowr_stdio(uint8_t val)
|
||||
}
|
||||
}
|
||||
|
||||
static void iowr_ret(uint8_t val)
|
||||
{
|
||||
retcode = val;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
bool tty = false;
|
||||
@ -61,6 +71,7 @@ int main(int argc, char *argv[])
|
||||
m->ramstart = RAMSTART;
|
||||
m->iord[STDIO_PORT] = iord_stdio;
|
||||
m->iowr[STDIO_PORT] = iowr_stdio;
|
||||
m->iowr[RET_PORT] = iowr_ret;
|
||||
// initialize memory
|
||||
for (int i=0; i<sizeof(KERNEL); i++) {
|
||||
m->mem[i] = KERNEL[i];
|
||||
@ -78,5 +89,5 @@ int main(int argc, char *argv[])
|
||||
emul_printdebug();
|
||||
}
|
||||
fclose(fp);
|
||||
return 0;
|
||||
return retcode;
|
||||
}
|
||||
|
@ -194,3 +194,7 @@ PC! c a -- Spit c to port a
|
||||
PC@ a -- c Fetch c from port a
|
||||
WORD -- a Read one word from buffered input and push its addr
|
||||
|
||||
There are also ascii const emitters:
|
||||
LF
|
||||
SPC
|
||||
|
||||
|
@ -5,3 +5,6 @@
|
||||
1 +
|
||||
AGAIN
|
||||
;
|
||||
|
||||
: LF 10 EMIT ;
|
||||
: SPC 32 EMIT ;
|
||||
|
@ -2,8 +2,9 @@ EMULDIR = ../emul
|
||||
|
||||
.PHONY: run
|
||||
run:
|
||||
$(MAKE) -C $(EMULDIR) zasm/zasm zasm/avra runbin/runbin shell/shell
|
||||
$(MAKE) -C $(EMULDIR) zasm/zasm zasm/avra runbin/runbin shell/shell forth/forth
|
||||
cd unit && ./runtests.sh
|
||||
cd zasm && ./runtests.sh
|
||||
cd avra && ./runtests.sh
|
||||
cd shell && ./runtests.sh
|
||||
cd forth && ./runtests.sh
|
||||
|
9
tests/forth/harness.fs
Normal file
9
tests/forth/harness.fs
Normal file
@ -0,0 +1,9 @@
|
||||
( Forth testing harness
|
||||
"#" means "assert". We stop at first failure, indicating
|
||||
the failure through IO on port 1 )
|
||||
|
||||
: fail SPC ." failed" LF 1 1 PC! BYE ;
|
||||
|
||||
: # SKIP? fail SPC ." pass" LF ;
|
||||
|
||||
: #eq 2DUP SWAP . SPC '=' EMIT SPC . '?' EMIT = # ;
|
27
tests/forth/runtests.sh
Executable file
27
tests/forth/runtests.sh
Executable file
@ -0,0 +1,27 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
BASE=../..
|
||||
EXEC="${BASE}/emul/forth/forth"
|
||||
FDIR="${BASE}/forth"
|
||||
TMP=$(mktemp)
|
||||
|
||||
chk() {
|
||||
echo "Running test $1"
|
||||
cat harness.fs $1 > ${TMP}
|
||||
if ! ${EXEC} ${TMP}; then
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
if [ ! -z $1 ]; then
|
||||
chk $1
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# those tests run without any builtin
|
||||
for fn in test_*.fs; do
|
||||
chk "${fn}"
|
||||
done
|
||||
|
||||
echo "All tests passed!"
|
||||
rm ${TMP}
|
5
tests/forth/test_ari.fs
Normal file
5
tests/forth/test_ari.fs
Normal file
@ -0,0 +1,5 @@
|
||||
48 13 + 61 #eq
|
||||
48 13 - 35 #eq
|
||||
48 13 * 624 #eq
|
||||
48 13 / 3 #eq
|
||||
48 13 MOD 9 #eq
|
Loading…
Reference in New Issue
Block a user