diff options
author | David Phillips <david@sighup.nz> | 2019-08-11 17:22:20 +1200 |
---|---|---|
committer | David Phillips <david@sighup.nz> | 2019-08-11 17:22:20 +1200 |
commit | 2d2628df0001d2b643811dc69717c4afe70c4e31 (patch) | |
tree | f5d0da23c47c3e677ca423a91838c5ad5467a5d9 /test/asm/run-asm.sh | |
parent | 0e6f47211a0516cf2c96d2b9e89c0d841978c143 (diff) | |
download | toy-cpu-assembler-2d2628df0001d2b643811dc69717c4afe70c4e31.tar.xz |
Fix and add tests for NULL deref cases found by scan-build
Diffstat (limited to 'test/asm/run-asm.sh')
-rwxr-xr-x | test/asm/run-asm.sh | 59 |
1 files changed, 59 insertions, 0 deletions
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" |