diff --git a/test/swen90006/machine/PartitioningTests.java b/test/swen90006/machine/PartitioningTests.java index 5494b44f4615351a610fc7b0b649d30b4b2d0a40..5e70913e765aca941760514e8a861ff2b5100293 100644 --- a/test/swen90006/machine/PartitioningTests.java +++ b/test/swen90006/machine/PartitioningTests.java @@ -8,83 +8,132 @@ import java.nio.file.Files; import java.nio.file.FileSystems; import org.junit.*; + +import com.sun.xml.internal.ws.util.StringUtils; + import static org.junit.Assert.*; -public class PartitioningTests -{ - //Any method annotated with "@Before" will be executed before each test, - //allowing the tester to set up some shared resources. - @Before public void setUp() - { - } - - //Any method annotated with "@After" will be executed after each test, - //allowing the tester to release any shared resources used in the setup. - @After public void tearDown() - { - } - - //Any method annotation with "@Test" is executed as a test. - @Test public void aTest() - { - //the assertEquals method used to check whether two values are - //equal, using the equals method - final int expected = 2; - final int actual = 1 + 1; - assertEquals(expected, actual); - } - - @Test public void anotherTest() - { - List<String> list = new ArrayList<String>(); - list.add("a"); - list.add("b"); - - //the assertTrue method is used to check whether something holds. - assertTrue(list.contains("a")); - } - - //Test test opens a file and executes the machine - @Test public void aFileOpenTest() - { - final List<String> lines = readInstructions("examples/array.s"); - Machine m = new Machine(); - assertEquals(m.execute(lines), 45); - } - - //To test an exception, specify the expected exception after the @Test - @Test(expected = java.io.IOException.class) - public void anExceptionTest() - throws Throwable - { - throw new java.io.IOException(); - } - - //This test should fail. - //To provide additional feedback when a test fails, an error message - //can be included - @Test public void aFailedTest() - { - //include a message for better feedback - final int expected = 2; - final int actual = 1 + 2; - assertEquals("Some failure message", expected, actual); - } - - //Read in a file containing a program and convert into a list of - //string instructions - private List<String> readInstructions(String file) - { - Charset charset = Charset.forName("UTF-8"); - List<String> lines = null; - try { - lines = Files.readAllLines(FileSystems.getDefault().getPath(file), charset); - } - catch (Exception e){ - System.err.println("Invalid input file! (stacktrace follows)"); - e.printStackTrace(System.err); - System.exit(1); - } - return lines; - } +public class PartitioningTests { + + @Test(expected = InvalidInstructionException.class) + public void EC1() throws Throwable { + Machine machine = new Machine(); + List<String> instruction = new ArrayList<>(); + instruction.add("add R-1 R0"); + machine.execute(instruction); + } + + @Test(expected = InvalidInstructionException.class) + public void EC2() throws Throwable { + Machine machine = new Machine(); + List<String> instruction = new ArrayList<>(); + instruction.add("sub R32 R0"); + machine.execute(instruction); + } + + @Test(expected = InvalidInstructionException.class) + public void EC3() throws Throwable { + Machine machine = new Machine(); + List<String> instruction = new ArrayList<>(); + instruction.add("mov R0 -65536"); + machine.execute(instruction); + } + + @Test(expected = InvalidInstructionException.class) + public void EC4() throws Throwable { + Machine machine = new Machine(); + List<String> instruction = new ArrayList<>(); + instruction.add("ldr R0 R1 65536"); + machine.execute(instruction); + } + + @Test + public void EC5() { + Machine machine = new Machine(); + List<String> instruction = new ArrayList<>(); + instruction.add("ret R0"); + assertEquals(machine.execute(instruction), 0); + } + + @Test(expected = NoReturnValueException.class) + public void EC6() throws Throwable { + Machine machine = new Machine(); + List<String> instruction = new ArrayList<>(); + instruction.add("jmp -1"); + machine.execute(instruction); + } + + @Test(expected = InvalidInstructionException.class) + public void EC7() throws Throwable { + Machine machine = new Machine(); + List<String> instruction = new ArrayList<>(); + instruction.add("div R-1 R0 R1"); + instruction.add("ret R0"); + machine.execute(instruction); + } + + @Test(expected = InvalidInstructionException.class) + public void EC8() throws Throwable { + Machine machine = new Machine(); + List<String> instruction = new ArrayList<>(); + instruction.add("str R32 1 R0"); + instruction.add("ret R0"); + machine.execute(instruction); + } + + @Test(expected = InvalidInstructionException.class) + public void EC9() throws Throwable { + Machine machine = new Machine(); + List<String> instruction = new ArrayList<>(); + instruction.add("jz R0 -65536"); + instruction.add("ret R0"); + machine.execute(instruction); + } + + @Test(expected = InvalidInstructionException.class) + public void EC10() throws Throwable { + Machine machine = new Machine(); + List<String> instruction = new ArrayList<>(); + instruction.add("mov R0 65536"); + instruction.add("jz R0 1"); + instruction.add("ret R0"); + machine.execute(instruction); + } + + @Test + public void EC11() { + Machine machine = new Machine(); + List<String> instruction = new ArrayList<>(); + instruction.add("mov R0 -65535"); + instruction.add("mov R31 65535"); + instruction.add("mul R1 R0 R31"); + instruction.add("ret R0"); + assertEquals(machine.execute(instruction), -65535); + } + + @Test(expected = NoReturnValueException.class) + public void EC12() { + Machine machine = new Machine(); + List<String> instruction = new ArrayList<>(); + instruction.add("mov R0 -65535"); + instruction.add("mov R31 65535"); + instruction.add("jmp 2"); + machine.execute(instruction); + } + + @Test(expected = InvalidInstructionException.class) + public void EC13() { + Machine machine = new Machine(); + List<String> instruction = new ArrayList<>(); + instruction.add(""); + instruction.add("abc"); + machine.execute(instruction); + } + + @Test(expected = NoReturnValueException.class) + public void EC14() { + Machine machine = new Machine(); + List<String> instruction = new ArrayList<>(); + machine.execute(instruction); + } }