Add some integration tests and runner

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2020-02-25 13:48:03 -05:00
parent 145739aee2
commit 362590292a
6 changed files with 199 additions and 0 deletions

25
run_asm_tests.sh Executable file
View File

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

38
tests/test_add.asm Normal file
View File

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

34
tests/test_div.asm Normal file
View File

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

34
tests/test_mod.asm Normal file
View File

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

34
tests/test_mul.asm Normal file
View File

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

34
tests/test_sub.asm Normal file
View File

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