diff options
| author | Melodi <62381002+Melodi17@users.noreply.github.com> | 2026-07-11 09:03:50 +1000 |
|---|---|---|
| committer | Melodi <62381002+Melodi17@users.noreply.github.com> | 2026-07-11 09:03:50 +1000 |
| commit | cb3cc7e94327c57a0f7539d8f8f2406ca4b04037 (patch) | |
| tree | 8e4d241a466e58b438579622a8a1a6e2339489e9 /Q1.tests/Core | |
| parent | 512a5f0efeea46994d01124b409ef51f9b9177a0 (diff) | |
checkpointstability-rewrite
Diffstat (limited to 'Q1.tests/Core')
| -rw-r--r-- | Q1.tests/Core/Instructions/LogicInstructionTests.cs | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/Q1.tests/Core/Instructions/LogicInstructionTests.cs b/Q1.tests/Core/Instructions/LogicInstructionTests.cs new file mode 100644 index 0000000..d0c0558 --- /dev/null +++ b/Q1.tests/Core/Instructions/LogicInstructionTests.cs @@ -0,0 +1,151 @@ +namespace Q1.tests.Core.Instructions; + +using core.Arch; +using core.Arch.Lookups; +using core.Components; + +[TestFixture] +public class LogicInstructionTests : InstructionTestBase +{ + [TestCase(0x0000, 0x01)] + [TestCase(0x0001, 0x00)] + [TestCase(0x0005, 0x00)] + public void NotLxInstruction_PerformsNot(i32 input, i32 output) + { + // Arrange + var chip = this.CreateChip(); + chip.Lx = (u16) input; + + var instruction = InstructionEncoding + .Encode( + InstructionSet.GetOpcode("NOT(LX)"), + 0, + 0, + true); + + chip.Bus.WriteWord(chip.Pc, instruction); + + // Act + chip.Clock(); + + // Assert + u16 expected = (u16) output; + Assert.That(chip.Lx, Is.EqualTo(expected)); + } + + [TestCase(0x0000, 0x01)] + [TestCase(0x0001, 0x00)] + [TestCase(0x0005, 0x00)] + public void NotInstruction_PerformsNot(i32 input, i32 output) + { + // Arrange + var chip = this.CreateChip(); + + var instruction = InstructionEncoding + .Encode( + InstructionSet.GetOpcode("NOT"), + AddressingModes.GetAddressingMode("Immediate"), + 0, + true); + + chip.Bus.WriteWord(chip.Pc, instruction); + chip.Bus.WriteWord((u16) (chip.Pc + 2), (u16) input); + + // Act + chip.Clock(); + + // Assert + u16 expected = (u16) output; + Assert.That(chip.Lx, Is.EqualTo(expected)); + } + + [TestCase(0x0000, 0x0000, 0x01)] + [TestCase(0x0000, 0x0001, 0x00)] + [TestCase(0x0001, 0x0000, 0x00)] + [TestCase(0x0001, 0x0001, 0x01)] + [TestCase(0x1234, 0x5678, 0x00)] + [TestCase(0x8342, 0x8342, 0x01)] + public void CompareInstruction_ComparesCorrectly(i32 a, i32 b, i32 expected) + { + // Arrange + var chip = this.CreateChip(); + + var instruction = InstructionEncoding + .Encode( + InstructionSet.GetOpcode("CMP"), + AddressingModes.GetAddressingMode("Immediate"), + AddressingModes.GetAddressingMode("Immediate"), + true); + + chip.Bus.WriteWord(chip.Pc, instruction); + chip.Bus.WriteWord((u16) (chip.Pc + 2), (u16) a); + chip.Bus.WriteWord((u16) (chip.Pc + 4), (u16) b); + + // Act + chip.Clock(); + + // Assert + u16 expected16 = (u16) expected; + Assert.That(chip.Lx, Is.EqualTo(expected16)); + } + + [TestCase(0x0000, 0x0000, 0x00)] + [TestCase(0x0000, 0x0001, 0x01)] + [TestCase(0x0001, 0x0000, 0x00)] + [TestCase(0x0001, 0x0001, 0x00)] + [TestCase(0x1234, 0x5678, 0x01)] + [TestCase(0x8342, 0x1234, 0x00)] + public void LessThanInstruction_ComparesCorrectly(i32 a, i32 b, i32 expected) + { + // Arrange + var chip = this.CreateChip(); + + var instruction = InstructionEncoding + .Encode( + InstructionSet.GetOpcode("LT"), + AddressingModes.GetAddressingMode("Immediate"), + AddressingModes.GetAddressingMode("Immediate"), + true); + + chip.Bus.WriteWord(chip.Pc, instruction); + chip.Bus.WriteWord((u16) (chip.Pc + 2), (u16) a); + chip.Bus.WriteWord((u16) (chip.Pc + 4), (u16) b); + + // Act + chip.Clock(); + + // Assert + u16 expected16 = (u16) expected; + Assert.That(chip.Lx, Is.EqualTo(expected16)); + } + + [TestCase(0x0000, 0x0000, 0x00)] + [TestCase(0x0000, 0x0001, 0x00)] + [TestCase(0x0001, 0x0000, 0x01)] + [TestCase(0x0001, 0x0001, 0x00)] + [TestCase(0x5678, 0x1234, 0x01)] + [TestCase(0x1234, 0x8342, 0x00)] + public void GreaterThanInstruction_ComparesCorrectly(i32 a, i32 b, i32 expected) + { + // Arrange + var chip = this.CreateChip(); + + var instruction = InstructionEncoding + .Encode( + InstructionSet.GetOpcode("GT"), + AddressingModes.GetAddressingMode("Immediate"), + AddressingModes.GetAddressingMode("Immediate"), + true); + + chip.Bus.WriteWord(chip.Pc, instruction); + chip.Bus.WriteWord((u16) (chip.Pc + 2), (u16) a); + chip.Bus.WriteWord((u16) (chip.Pc + 4), (u16) b); + + // Act + chip.Clock(); + + // Assert + u16 expected16 = (u16) expected; + Assert.That(chip.Lx, Is.EqualTo(expected16)); + } +}
\ No newline at end of file |
