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
|
// in sync with glue.asm
|
||||||
#define RAMSTART 0x900
|
#define RAMSTART 0x900
|
||||||
#define STDIO_PORT 0x00
|
#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 int running;
|
||||||
static FILE *fp;
|
static FILE *fp;
|
||||||
|
static int retcode = 0;
|
||||||
|
|
||||||
static uint8_t iord_stdio()
|
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[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
bool tty = false;
|
bool tty = false;
|
||||||
@ -61,6 +71,7 @@ int main(int argc, char *argv[])
|
|||||||
m->ramstart = RAMSTART;
|
m->ramstart = RAMSTART;
|
||||||
m->iord[STDIO_PORT] = iord_stdio;
|
m->iord[STDIO_PORT] = iord_stdio;
|
||||||
m->iowr[STDIO_PORT] = iowr_stdio;
|
m->iowr[STDIO_PORT] = iowr_stdio;
|
||||||
|
m->iowr[RET_PORT] = iowr_ret;
|
||||||
// initialize memory
|
// initialize memory
|
||||||
for (int i=0; i<sizeof(KERNEL); i++) {
|
for (int i=0; i<sizeof(KERNEL); i++) {
|
||||||
m->mem[i] = KERNEL[i];
|
m->mem[i] = KERNEL[i];
|
||||||
@ -78,5 +89,5 @@ int main(int argc, char *argv[])
|
|||||||
emul_printdebug();
|
emul_printdebug();
|
||||||
}
|
}
|
||||||
fclose(fp);
|
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
|
PC@ a -- c Fetch c from port a
|
||||||
WORD -- a Read one word from buffered input and push its addr
|
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 +
|
1 +
|
||||||
AGAIN
|
AGAIN
|
||||||
;
|
;
|
||||||
|
|
||||||
|
: LF 10 EMIT ;
|
||||||
|
: SPC 32 EMIT ;
|
||||||
|
@ -2,8 +2,9 @@ EMULDIR = ../emul
|
|||||||
|
|
||||||
.PHONY: run
|
.PHONY: run
|
||||||
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 unit && ./runtests.sh
|
||||||
cd zasm && ./runtests.sh
|
cd zasm && ./runtests.sh
|
||||||
cd avra && ./runtests.sh
|
cd avra && ./runtests.sh
|
||||||
cd shell && ./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