diff --git a/tests/test_add.asm b/tests/test_add.asm deleted file mode 100644 index 0eea268..0000000 --- a/tests/test_add.asm +++ /dev/null @@ -1,38 +0,0 @@ -.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_arithmetic.asm b/tests/test_arithmetic.asm new file mode 100644 index 0000000..b3e6115 --- /dev/null +++ b/tests/test_arithmetic.asm @@ -0,0 +1,114 @@ +.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 + + ; Test subtraction + mov %status, $5 + mov %r0, (number)u8 + sub %r0, $1 + cmpeq %r0, $9 + jz end + + ; Test subtraction from a register + mov %status, $6 + mov %r1, $2 + sub %r0, %r1 + cmpeq %r0, $7 + jz end + + ; Test subtraction overflow + mov %status, $7 + sub %r0, $8 + cmpeq %r0, $0xFFFFFFFFFFFFFFFF + jz end + + ; Test multiplication + mov %status, $8 + mov %r0, (number)u8 + mul %r0, $1 + cmpeq %r0, $10 + jz end + + ; Test multiplication from a register + mov %status, $9 + mov %r1, $2 + mul %r0, %r1 + cmpeq %r0, $20 + jz end + + ; Test negative multiplication + mov %status, $10 + mul %r0, $0xFFFFFFFFFFFFFFFF ; -1 + cmpeq %r0, $0xFFFFFFFFFFFFFFEC ; -20 + jz end + + ; Test division + mov %status, $11 + mov %r0, (number)u8 + div %r0, $2 + cmpeq %r0, $5 + jz end + + ; Test integer division + mov %status, $12 + mov %r1, $2 + div %r0, %r1 + cmpeq %r0, $2 + jz end + + ; Test negative division with idiv + mov %status, $13 + idiv %r0, $0xFFFFFFFFFFFFFFFF ; -1 + cmpeq %r0, $0xFFFFFFFFFFFFFFFE ; -2 + jz end + + ; Test modulo + mov %status, $14 + mov %r0, (number)u8 + mod %r0, $4 + cmpeq %r0, $2 + jz end + + ; Test mod from a register + mov %status, $15 + mod %r0, %r0 + cmpeq %r0, $0 + jz end + + ; TODO : Test mod and div by zero + + mov %status, $0 + end: + halt + + .export main +} + +.meta { + entry: main +} + diff --git a/tests/test_bitwise.asm b/tests/test_bitwise.asm new file mode 100644 index 0000000..1ff86bb --- /dev/null +++ b/tests/test_bitwise.asm @@ -0,0 +1,80 @@ +.section data $0x0 { + flags: .u8 $0b1001 + + main: + ; Test bit and + mov %status, $1 + mov %r0, $0b1000 + and %r0, (flags)u8 + cmpeq %r0, $0b1000 + jz end + + ; Test shift right + mov %status, $2 + shr %r0, $2 + cmpeq %r0, $0b0010 + jz end + + ; Test bit and + mov %status, $3 + and %r0, (flags)u8 + cmpeq %r0, $0 + jz end + + ; Test bit or + mov %status, $4 + or %r0, (flags)u8 + cmpeq %r0, (flags)u8 + jz end + + ; Test bit or + mov %status, $5 + or %r0, $0b10 + cmpeq %r0, $0b1011 + jz end + + ; Test shift left + mov %status, $6 + shl %r0, $1 + cmpeq %r0, $0b10110 + jz end + + ; Test xor + mov %status, $7 + xor %r0, %r0 + cmpeq %r0, $0 + jz end + + ; Test xor + mov %status, $8 + mov %r0, $0b1000 + xor %r0, (flags)u8 + cmpeq %r0, $1 + jz end + + ; Test inv + mov %status, $9 + ; TODO : destination size - the line below inverts all 64 bits instead of the source 8 bits + ; inv %r0, (flags)u8 + inv (flags)u8, (flags)u8 + cmpeq (flags)u8, $0b11110110 + jz end + + ; Test inv again (reset flags to their previous value) + mov %status, $10 + inv (flags)u8, (flags)u8 + cmpeq (flags)u8, $0b00001001 + jz end + + mov %status, $0 + end: + halt + + .export main +} + +.meta { + entry: main +} + + diff --git a/tests/test_div.asm b/tests/test_div.asm deleted file mode 100644 index 1601699..0000000 --- a/tests/test_div.asm +++ /dev/null @@ -1,34 +0,0 @@ -.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 deleted file mode 100644 index 1b978d7..0000000 --- a/tests/test_mod.asm +++ /dev/null @@ -1,34 +0,0 @@ -.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 deleted file mode 100644 index 3a670e8..0000000 --- a/tests/test_mul.asm +++ /dev/null @@ -1,34 +0,0 @@ -.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 deleted file mode 100644 index a34f4d0..0000000 --- a/tests/test_sub.asm +++ /dev/null @@ -1,34 +0,0 @@ -.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 -}