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/Pipeline/AssemblerTests.cs | |
| parent | 512a5f0efeea46994d01124b409ef51f9b9177a0 (diff) | |
checkpointstability-rewrite
Diffstat (limited to 'Q1.tests/Pipeline/AssemblerTests.cs')
| -rw-r--r-- | Q1.tests/Pipeline/AssemblerTests.cs | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/Q1.tests/Pipeline/AssemblerTests.cs b/Q1.tests/Pipeline/AssemblerTests.cs new file mode 100644 index 0000000..4eb36bb --- /dev/null +++ b/Q1.tests/Pipeline/AssemblerTests.cs @@ -0,0 +1,59 @@ +namespace Q1.tests.Pipeline; + +using core.Arch; +using core.Arch.Constants; +using core.Arch.Lookups; +using core.Pipeline; + +[TestFixture] +public class AssemblerTests +{ + private Assembler CreateAssembler() + { + return new Assembler(); + } + + private byte[] Assemble(string source) + { + var assembler = this.CreateAssembler(); + var reader = new StringReader(source); + return assembler.Assemble(reader).ToArray(); + } + + [Test] + public void Assembler_ShouldAssembleSimpleProgram() + { + // Arrange + string source = """ + mov 0x1234, ax + """; + + // Act + var result = Assemble(source); + + // Assert + MemoryStream expected = new MemoryStream(); + WriteWord(expected, InstructionEncoding.Encode( + InstructionSet.GetOpcode("MOV"), + AddressingModes.GetAddressingMode("Immediate"), + AddressingModes.GetAddressingMode("Register"), + true)); + WriteWord(expected, 0x1234); + WriteByte(expected, ChipRegisters.AX); + + Assert.That(result, Is.EqualTo(expected.ToArray())); + } + + private void WriteByte(MemoryStream stream, byte value) + { + stream.WriteByte(value); + } + + private void WriteWord(MemoryStream stream, ushort value) + { + u8 high = (u8) (value & 0xFF); + u8 low = (u8) ((value >> 8) & 0xFF); + stream.WriteByte(low); + stream.WriteByte(high); + } +}
\ No newline at end of file |
