import cpu.Registers import io.kotlintest.shouldBe import io.kotlintest.shouldThrow import io.kotlintest.specs.StringSpec import java.lang.IllegalArgumentException class RegisterTest : StringSpec({ "Test 16-Bit accessors" { val reg = Registers() reg.AF = 0xF83C reg.AF shouldBe 0xF83C reg.A shouldBe 0xF8 reg.F shouldBe 0x3C reg.BC = 0xF83C reg.BC shouldBe 0xF83C reg.B shouldBe 0xF8 reg.C shouldBe 0x3C reg.DE = 0xF83C reg.DE shouldBe 0xF83C reg.D shouldBe 0xF8 reg.E shouldBe 0x3C reg.HL = 0xF83C reg.HL shouldBe 0xF83C reg.H shouldBe 0xF8 reg.L shouldBe 0x3C } "Test 8-Bit register validation" { val reg = Registers() shouldThrow { reg.A = 0xFFFF Any() } shouldThrow { reg.F = 0xFFFF Any() } shouldThrow { reg.B = 0xFFFF Any() } shouldThrow { reg.C = 0xFFFF Any() } shouldThrow { reg.D = 0xFFFF Any() } shouldThrow { reg.E = 0xFFFF Any() } shouldThrow { reg.H = 0xFFFF Any() } shouldThrow { reg.L = 0xFFFF Any() } } "Test 16-Bit register validation" { val reg = Registers() shouldThrow { reg.AF = 0xFFFFFF Any() } shouldThrow { reg.BC = 0xFFFFFF Any() } shouldThrow { reg.DE = 0xFFFFFF Any() } shouldThrow { reg.HL = 0xFFFFFF Any() } shouldThrow { reg.SP = 0xFFFFFF Any() } shouldThrow { reg.PC = 0xFFFFFF Any() } } "Test registers" { val reg = Registers() reg.A = 0xA0 reg.A shouldBe 0xA0 reg.F = 0xA1 reg.F shouldBe 0xA1 reg.B = 0xA2 reg.B shouldBe 0xA2 reg.C = 0xA3 reg.C shouldBe 0xA3 reg.D = 0xA4 reg.D shouldBe 0xA4 reg.E = 0xA5 reg.E shouldBe 0xA5 reg.H = 0xA6 reg.H shouldBe 0xA6 reg.L = 0xA7 reg.L shouldBe 0xA7 reg.SP = 0xAAFE reg.SP shouldBe 0xAAFE reg.PC = 0xAAFE reg.PC shouldBe 0xAAFE } })