diff options
Diffstat (limited to 'test')
17 files changed, 79 insertions, 10 deletions
diff --git a/test/Makefile b/test/Makefile index cb0f3ee..083802c 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,3 +1,4 @@ test: + ./asm/run-asm.sh ./full-pipeline/run-full-pipeline.sh ./emul/run-emul.sh diff --git a/test/asm/run-asm.sh b/test/asm/run-asm.sh new file mode 100755 index 0000000..7574abb --- /dev/null +++ b/test/asm/run-asm.sh @@ -0,0 +1,59 @@ +#!/bin/bash -e + +# +# Script for running all of the automated which will go from source to binary. +# + +fail() { + echo -e '[\e[1;31mFAIL\e[0m] '"$1:" "$2" + has_failure=1 +} + +pass() { + echo -e '[\e[1;32mPASS\e[0m] '"$1" +} + +clean() { + echo "Removing work dir $WORK" + rm -r "$WORK" +} + +if [ "$1" == "noclean" ]; then + NO_CLEAN=1 +else + NO_CLEAN=0 +fi +WORK=$(mktemp -d) +pushd $(dirname "$0") >/dev/null +source ../valgrind.sh +export ASM="$PWD/../../assembler" +export DISASM="$PWD/../../disassembler" +has_failure=0 + +for first_stage_asm in should-fail/*.asm ; do + t=$(basename "$first_stage_asm") + first_stage_bin="$WORK/${t}-first_stage.bin" + log="$WORK/${t}.log" + + # Assemble test code + set +e + $VALGRIND $VALGRIND_OPTS "$ASM" "$first_stage_asm" "$first_stage_bin" 2>"$log" + xc="$?" + set -e + if (( xc > 0 && xc < 128 )); then + pass "$t" "assembly xfailed" + elif (( xc == 0 )); then + fail "$t" "assembly didn't fail as expected" + else + fail "$t" "assembler was sent signal $(( xc - 128 ))" + fi +done +popd >/dev/null + +if [[ "$failure" != "0" && "$NO_CLEAN" == "1" ]] ; then + echo "Warning: Leaving work dir $WORK in place. Please remove this yourself" +else + clean +fi + +exit "$has_failure" diff --git a/test/asm/should-fail/001-segfault-li-comma-end.asm b/test/asm/should-fail/001-segfault-li-comma-end.asm new file mode 100644 index 0000000..bde586c --- /dev/null +++ b/test/asm/should-fail/001-segfault-li-comma-end.asm @@ -0,0 +1,2 @@ +; Test for bug previously found with scan-build. Important: no CR/LF at EOF +ldi $1,
\ No newline at end of file diff --git a/test/asm/should-fail/002-segfault-b-short.asm b/test/asm/should-fail/002-segfault-b-short.asm new file mode 100644 index 0000000..898a3b0 --- /dev/null +++ b/test/asm/should-fail/002-segfault-b-short.asm @@ -0,0 +1,2 @@ +; Test for bug previously found with scan-build. Important: no CR/LF at EOF +bnz
\ No newline at end of file diff --git a/test/asm/should-fail/003-segfault-j-short.asm b/test/asm/should-fail/003-segfault-j-short.asm new file mode 100644 index 0000000..0b1486b --- /dev/null +++ b/test/asm/should-fail/003-segfault-j-short.asm @@ -0,0 +1,2 @@ +; Test for bug previously found with scan-build. Important: no CR/LF at EOF +jmp
\ No newline at end of file diff --git a/test/asm/should-fail/004-segfault-imm-short.asm b/test/asm/should-fail/004-segfault-imm-short.asm new file mode 100644 index 0000000..42e8c4b --- /dev/null +++ b/test/asm/should-fail/004-segfault-imm-short.asm @@ -0,0 +1,2 @@ +; Test for bug previously found with scan-build. Important: no CR/LF at EOF +addi $0, $0,
\ No newline at end of file diff --git a/test/full-pipeline/run-full-pipeline.sh b/test/full-pipeline/run-full-pipeline.sh index 25f7bf7..c5a1700 100755 --- a/test/full-pipeline/run-full-pipeline.sh +++ b/test/full-pipeline/run-full-pipeline.sh @@ -11,6 +11,7 @@ fail() { echo -e '[\e[1;31mFAIL\e[0m] '"$1:" "$2" + has_failure=1 } pass() { @@ -34,33 +35,33 @@ export ASM="$PWD/../../assembler" export DISASM="$PWD/../../disassembler" has_failure=0 -for first_stage_asm in *.asm ; do - first_stage_bin="$WORK/${first_stage_asm}-first_stage.bin" - second_stage_asm="$WORK/${first_stage_asm}-second_stage.asm" - second_stage_bin="$WORK/${first_stage_asm}-second_stage.bin" +for first_stage_asm in should-pass/*.asm ; do + t=$(basename "$first_stage_asm") + first_stage_bin="$WORK/${t}-first_stage.bin" + second_stage_asm="$WORK/${t}-second_stage.asm" + second_stage_bin="$WORK/${t}-second_stage.bin" # Assemble test code if ! $VALGRIND $VALGRIND_OPTS "$ASM" "$first_stage_asm" "$first_stage_bin" ; then - fail "$first_stage_asm" "first stage assembly failed" + fail "$t" "first stage assembly failed" continue fi # Disassemble test code and re-assemble that disassembly if ! $VALGRIND $VALGRIND_OPTS "$DISASM" "$first_stage_bin" "$second_stage_asm" ; then - fail "$first_stage_asm" "first stage disassembly failed" + fail "$t" "first stage disassembly failed" continue fi if ! $VALGRIND $VALGRIND_OPTS "$ASM" "$second_stage_asm" "$second_stage_bin" ; then - fail "$first_stage_asm" "second stage assembly failed" + fail "$t" "second stage assembly failed" continue fi # first stage bin and second stage identical for test pass if diff "$first_stage_bin" "$second_stage_bin" >/dev/null; then - pass "$first_stage_asm" + pass "$t" else - fail "$first_stage_asm" "binary mismatch" - has_failure=1 + fail "$t" "binary mismatch" fi done diff --git a/test/full-pipeline/001-nop.asm b/test/full-pipeline/should-pass/001-nop.asm index c27745a..c27745a 100644 --- a/test/full-pipeline/001-nop.asm +++ b/test/full-pipeline/should-pass/001-nop.asm diff --git a/test/full-pipeline/002-nops.asm b/test/full-pipeline/should-pass/002-nops.asm index 45a3cbf..45a3cbf 100644 --- a/test/full-pipeline/002-nops.asm +++ b/test/full-pipeline/should-pass/002-nops.asm diff --git a/test/full-pipeline/003-rtype.asm b/test/full-pipeline/should-pass/003-rtype.asm index 7ed5f78..7ed5f78 100644 --- a/test/full-pipeline/003-rtype.asm +++ b/test/full-pipeline/should-pass/003-rtype.asm diff --git a/test/full-pipeline/004-itype.asm b/test/full-pipeline/should-pass/004-itype.asm index 4fbc032..4fbc032 100644 --- a/test/full-pipeline/004-itype.asm +++ b/test/full-pipeline/should-pass/004-itype.asm diff --git a/test/full-pipeline/005-small-loop.asm b/test/full-pipeline/should-pass/005-small-loop.asm index 5c47e51..5c47e51 100644 --- a/test/full-pipeline/005-small-loop.asm +++ b/test/full-pipeline/should-pass/005-small-loop.asm diff --git a/test/full-pipeline/006-2-inst-2-words.asm b/test/full-pipeline/should-pass/006-2-inst-2-words.asm index c4e2dbc..c4e2dbc 100644 --- a/test/full-pipeline/006-2-inst-2-words.asm +++ b/test/full-pipeline/should-pass/006-2-inst-2-words.asm diff --git a/test/full-pipeline/007-3-inst-3-words.asm b/test/full-pipeline/should-pass/007-3-inst-3-words.asm index 717a122..717a122 100644 --- a/test/full-pipeline/007-3-inst-3-words.asm +++ b/test/full-pipeline/should-pass/007-3-inst-3-words.asm diff --git a/test/full-pipeline/008-3-inst-5-words.asm b/test/full-pipeline/should-pass/008-3-inst-5-words.asm index c0a33b5..c0a33b5 100644 --- a/test/full-pipeline/008-3-inst-5-words.asm +++ b/test/full-pipeline/should-pass/008-3-inst-5-words.asm diff --git a/test/full-pipeline/009-3-inst-5-words-rev.asm b/test/full-pipeline/should-pass/009-3-inst-5-words-rev.asm index 5592edd..5592edd 100644 --- a/test/full-pipeline/009-3-inst-5-words-rev.asm +++ b/test/full-pipeline/should-pass/009-3-inst-5-words-rev.asm diff --git a/test/full-pipeline/010-empty.asm b/test/full-pipeline/should-pass/010-empty.asm index e69de29..e69de29 100644 --- a/test/full-pipeline/010-empty.asm +++ b/test/full-pipeline/should-pass/010-empty.asm |