From 362590292a1e1f6ab7cd7971faa2871fcc7aa928 Mon Sep 17 00:00:00 2001 From: Alek Ratzloff Date: Tue, 25 Feb 2020 13:48:03 -0500 Subject: [PATCH] Add some integration tests and runner Signed-off-by: Alek Ratzloff --- run_asm_tests.sh | 25 +++++++++++++++++++++++++ tests/test_add.asm | 38 ++++++++++++++++++++++++++++++++++++++ tests/test_div.asm | 34 ++++++++++++++++++++++++++++++++++ tests/test_mod.asm | 34 ++++++++++++++++++++++++++++++++++ tests/test_mul.asm | 34 ++++++++++++++++++++++++++++++++++ tests/test_sub.asm | 34 ++++++++++++++++++++++++++++++++++ 6 files changed, 199 insertions(+) create mode 100755 run_asm_tests.sh create mode 100644 tests/test_add.asm create mode 100644 tests/test_div.asm create mode 100644 tests/test_mod.asm create mode 100644 tests/test_mul.asm create mode 100644 tests/test_sub.asm diff --git a/run_asm_tests.sh b/run_asm_tests.sh new file mode 100755 index 0000000..069a7f9 --- /dev/null +++ b/run_asm_tests.sh @@ -0,0 +1,25 @@ +#!/bin/bash +here="$(dirname "$0")" +cd "$here" + +tests="./tests" + +RED="\e[31m" +GREEN="\e[32m" +RESET="\e[0m" + +# Build project +cargo build + +find "$tests" -type f -name '*.asm' | \ +while read fname; do + test_name="$(basename "${fname%.asm}")" + printf "%s ... " "$test_name" + cargo run --quiet "$fname" + exit_code="$?" + if (( "$exit_code" == 0 )); then + echo -e "${GREEN}OK${RESET}" + else + echo -e "${RED}FAIL${RESET} ($exit_code)" + fi +done diff --git a/tests/test_add.asm b/tests/test_add.asm new file mode 100644 index 0000000..0eea268 --- /dev/null +++ b/tests/test_add.asm @@ -0,0 +1,38 @@ +.section data $0x0 { + number: .u8 $10 + + main: + ; Test addition + mov %status, $1 + add %r0, $1 + cmpeq %r0, $1 + jz end + + ; Test addition from a register + mov %status, $2 + add %r0, %r0 + cmpeq %r0, $2 + jz end + + ; Test addition from a u8 location + mov %status, $3 + add %r0, (number)u8 + cmpeq %r0, $12 + jz end + + ; Test addition overflow + mov %status, $4 + add %r0, $0xFFFFFFFFFFFFFFFF + cmpeq %r0, $11 + jz end + + mov %status, $0 + end: + halt + + .export main +} + +.meta { + entry: main +} diff --git a/tests/test_div.asm b/tests/test_div.asm new file mode 100644 index 0000000..1601699 --- /dev/null +++ b/tests/test_div.asm @@ -0,0 +1,34 @@ +.section data $0x0 { + number: .u8 $10 + + main: + ; Test division + mov %status, $1 + mov %r0, (number)u8 + div %r0, $2 + cmpeq %r0, $5 + jz end + + ; Test integer division + mov %status, $2 + mov %r1, $2 + div %r0, %r1 + cmpeq %r0, $2 + jz end + + ; Test negative division with idiv + mov %status, $3 + idiv %r0, $0xFFFFFFFFFFFFFFFF ; -1 + cmpeq %r0, $0xFFFFFFFFFFFFFFFE ; -2 + jz end + + mov %status, $0 + end: + halt + + .export main +} + +.meta { + entry: main +} diff --git a/tests/test_mod.asm b/tests/test_mod.asm new file mode 100644 index 0000000..1b978d7 --- /dev/null +++ b/tests/test_mod.asm @@ -0,0 +1,34 @@ +.section data $0x0 { + number: .u8 $10 + + main: + ; Test modulo + mov %status, $1 + mov %r0, (number)u8 + mod $r0, $4 + cmpeq %r0, $2 + jz end + + ; Test modulo from a register + mov %status, $2 + add %r0, %r0 + cmpeq %r0, $2 + jz end + + ; Test mod by zero + mov %status, $4 + add %r0, $0xFFFFFFFFFFFFFFFF + cmpeq %r0, $11 + jz end + + mov %status, $0 + end: + halt + + .export main +} + +.meta { + entry: main +} + diff --git a/tests/test_mul.asm b/tests/test_mul.asm new file mode 100644 index 0000000..3a670e8 --- /dev/null +++ b/tests/test_mul.asm @@ -0,0 +1,34 @@ +.section data $0x0 { + number: .u8 $10 + + main: + ; Test multiplication + mov %status, $1 + mov %r0, (number)u8 + mul %r0, $1 + cmpeq %r0, $10 + jz end + + ; Test multiplication from a register + mov %status, $2 + mov %r1, $2 + mul %r0, %r1 + cmpeq %r0, $20 + jz end + + ; Test negative multiplication + mov %status, $3 + mul %r0, $0xFFFFFFFFFFFFFFFF ; -1 + cmpeq %r0, $0xFFFFFFFFFFFFFFEC ; -20 + jz end + + mov %status, $0 + end: + halt + + .export main +} + +.meta { + entry: main +} diff --git a/tests/test_sub.asm b/tests/test_sub.asm new file mode 100644 index 0000000..a34f4d0 --- /dev/null +++ b/tests/test_sub.asm @@ -0,0 +1,34 @@ +.section data $0x0 { + number: .u8 $10 + + main: + ; Test subtraction + mov %status, $1 + mov %r0, (number)u8 + sub %r0, $1 + cmpeq %r0, $9 + jz end + + ; Test subtraction from a register + mov %status, $2 + mov %r1, $2 + sub %r0, %r1 + cmpeq %r0, $7 + jz end + + ; Test subtraction overflow + mov %status, $3 + sub %r0, $8 + cmpeq %r0, $0xFFFFFFFFFFFFFFFF + jz end + + mov %status, $0 + end: + halt + + .export main +} + +.meta { + entry: main +}