Sfoglia il codice sorgente

tests: add Forth tests

Modest first step
pull/95/head
Virgil Dupras 4 anni fa
parent
commit
f0cbda1f2e
7 ha cambiato i file con 62 aggiunte e 2 eliminazioni
  1. +12
    -1
      emul/forth/forth.c
  2. +4
    -0
      forth/dictionary.txt
  3. +3
    -0
      forth/str.fs
  4. +2
    -1
      tests/Makefile
  5. +9
    -0
      tests/forth/harness.fs
  6. +27
    -0
      tests/forth/runtests.sh
  7. +5
    -0
      tests/forth/test_ari.fs

+ 12
- 1
emul/forth/forth.c Vedi File

@@ -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;
}

+ 4
- 0
forth/dictionary.txt Vedi File

@@ -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


+ 3
- 0
forth/str.fs Vedi File

@@ -5,3 +5,6 @@
1 +
AGAIN
;

: LF 10 EMIT ;
: SPC 32 EMIT ;

+ 2
- 1
tests/Makefile Vedi File

@@ -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
- 0
tests/forth/harness.fs Vedi 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
- 0
tests/forth/runtests.sh Vedi 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
- 0
tests/forth/test_ari.fs Vedi 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…
Annulla
Salva