Add some integration tests and runner
Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
25
run_asm_tests.sh
Executable file
25
run_asm_tests.sh
Executable 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
38
tests/test_add.asm
Normal 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
34
tests/test_div.asm
Normal 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
34
tests/test_mod.asm
Normal 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
34
tests/test_mul.asm
Normal 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
34
tests/test_sub.asm
Normal 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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user