From 319abad1303693a093c684982b27e03debfe15cf Mon Sep 17 00:00:00 2001 From: simon987 Date: Thu, 30 Jul 2020 18:29:37 -0400 Subject: [PATCH] Test for ORG directive (#228) --- .../simon987/mar/server/assembly/Memory.java | 2 +- .../mar/server/TestExecutionResult.java | 2 +- .../mar/server/assembly/OrgDirectiveTest.java | 27 +++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 src/test/java/net/simon987/mar/server/assembly/OrgDirectiveTest.java diff --git a/src/main/java/net/simon987/mar/server/assembly/Memory.java b/src/main/java/net/simon987/mar/server/assembly/Memory.java index bc30408..7c2cf26 100755 --- a/src/main/java/net/simon987/mar/server/assembly/Memory.java +++ b/src/main/java/net/simon987/mar/server/assembly/Memory.java @@ -192,7 +192,7 @@ public class Memory implements Target, MongoSerializable, Cloneable { public Memory clone() { Memory memory = new Memory(words.length); memory.words = new char[words.length]; - System.arraycopy(memory.words, 0, words, 0, words.length); + System.arraycopy(words, 0, memory.words, 0, words.length); return memory; } } diff --git a/src/test/java/net/simon987/mar/server/TestExecutionResult.java b/src/test/java/net/simon987/mar/server/TestExecutionResult.java index 198f4e4..fd2c8b0 100644 --- a/src/test/java/net/simon987/mar/server/TestExecutionResult.java +++ b/src/test/java/net/simon987/mar/server/TestExecutionResult.java @@ -11,7 +11,7 @@ public class TestExecutionResult { public List hwiHistory; - private AssemblyResult ar; + public AssemblyResult ar; public TestExecutionResult(CpuState state, List hwiHistory, AssemblyResult ar) { this.state = state; diff --git a/src/test/java/net/simon987/mar/server/assembly/OrgDirectiveTest.java b/src/test/java/net/simon987/mar/server/assembly/OrgDirectiveTest.java new file mode 100644 index 0000000..cce8638 --- /dev/null +++ b/src/test/java/net/simon987/mar/server/assembly/OrgDirectiveTest.java @@ -0,0 +1,27 @@ +package net.simon987.mar.server.assembly; + +import net.simon987.mar.server.TestExecutionResult; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class OrgDirectiveTest { + + @Test + public void orgWikiExample() { + String code = "" + + "ORG 0x8000 \n" + + "my_var: DW 0x1234 \n" + + ".text \n" + + "MOV A, my_var \n" + + "brk \n"; + + TestExecutionResult res = TestHelper.executeCode(code); + + assertTrue(res.ar.exceptions.isEmpty()); + assertEquals(0x8000, res.ar.origin); + assertEquals(0x1234, res.memValue(0x8000)); + assertEquals(0x8000, res.regValue("A")); + } +}