From a28e304f6231c8a993c3200978c3ae8fe0032cad Mon Sep 17 00:00:00 2001
From: Jingjiahui Lu <jingjiahui.lu@student.unimelb.edu.au>
Date: Sun, 16 Sep 2018 20:31:52 +1000
Subject: [PATCH] Update BoundaryTests.java

---
 test/swen90006/machine/BoundaryTests.java | 369 ++++++++++++++++++----
 1 file changed, 303 insertions(+), 66 deletions(-)

diff --git a/test/swen90006/machine/BoundaryTests.java b/test/swen90006/machine/BoundaryTests.java
index 61ce1ca..39fa1a6 100644
--- a/test/swen90006/machine/BoundaryTests.java
+++ b/test/swen90006/machine/BoundaryTests.java
@@ -14,77 +14,314 @@ public class BoundaryTests
 {
   //Any method annotated with "@Before" will be executed before each test,
   //allowing the tester to set up some shared resources.
-  @Before public void setUp()
-  {
-  }
+	 @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 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);
-  }
+	  //Any method annotation with "@Test" is executed as a test.
 
-  @Test public void anotherTest()
-  {
-    List<String> list = new ArrayList<String>();
-    list.add("a");
-    list.add("b");
+	  @Test public void EC1B1()
+	  {
+		String a="RET R0;";
+	    final List<String> list = new ArrayList<String>();
+	    list.add(a);
+	    Machine m = new Machine();
+	    assertEquals(m.execute(list), 0);
+	  }
+	  
+	  @Test public void EC1B2()
+	  {
+		String a="RET R31;";
+	    final List<String> list = new ArrayList<String>();
+	    list.add(a);
+	    Machine m = new Machine();
+	    assertEquals(m.execute(list), 0);
+	  }
 
-    //the assertTrue method is used to check whether something holds.
-    assertTrue(list.contains("a"));
-  }
+	  @Test(expected=InvalidInstructionException.class)
+	  public void EC2B1() 
+		  throws Throwable
+		  {
+		    String a="RET R33;";
+		    final List<String> list = new ArrayList<String>();
+		    list.add(a);
+		    Machine machine = new Machine();
+		    assertEquals("Invalid",machine.execute(list),InvalidInstructionException.class);
+		  }
+	  
 
-  //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();
-  }
+	  @Test public void EC5B1()
+	  {
+		String a="MOV R2 1;";
+		String b="MOV R1 2;";
+	    String c="ADD R0 R1 R2;";
+	    String d="RET R0;";
+	    final List<String> list = new ArrayList<String>();
+	    list.add(a);
+	    list.add(b);
+	    list.add(c);
+	    list.add(d);
+	    Machine m = new Machine();
+	    assertEquals(m.execute(list), 3);
+	  }
+	  @Test public void EC5B2()
+	  {
+		String a="MOV R2 1;";
+		String b="MOV R1 2;";
+	    String c="ADD R31 R1 R2;";
+	    String d="RET R31;";
+	    final List<String> list = new ArrayList<String>();
+	    list.add(a);
+	    list.add(b);
+	    list.add(c);
+	    list.add(d);
+	    Machine m = new Machine();
+	    assertEquals(m.execute(list), 3);
+	  }
+	  @Test(expected=InvalidInstructionException.class) 
+	  public void EC6B1()
+	  {
+		String a="MOV R0 1;";
+		String b="MOV R1 2;";
+	    String c="ADD R32 R1 R2;";
+	    String d="RET R32;";
+	    final List<String> list = new ArrayList<String>();
+	    list.add(a);
+	    list.add(b);
+	    list.add(c);
+	    list.add(d);
+	    Machine m = new Machine();
+	    assertEquals("Invalid",m.execute(list),InvalidInstructionException.class);
+	  }
+	  
+	  @Test public void EC7()
+	  {
+		String a="MOV R1 6;";
+		String b="MOV R2 0;";
+	    String d="DIV R3 R1 R2;";
+		String e="RET R3;";
+	    final List<String> list = new ArrayList<String>();
+	    list.add(a);
+	    list.add(b);
+	    list.add(d);
+	    list.add(e);
+	    Machine m = new Machine();
+	    assertEquals(m.execute(list), 0);
+	  }
+	  @Test public void EC8()
+	  {
+		String a="MOV R1 6;";
+		String b="MOV R2 2;";
+	    String c="MOV R3 6;";
+	    String d="DIV R3 R1 R2;";
+	    String e="RET R3;";
+	    final List<String> list = new ArrayList<String>();
+	    list.add(a);
+	    list.add(b);
+	    list.add(c);
+	    list.add(d);
+	    list.add(e);
+	    Machine m = new Machine();
+	    assertEquals(m.execute(list), 3);
+	  }
+	  
+	  @Test public void EC9B1()
+	  {
+		String a="MOV R3 65535;";
+		String b="RET R3;";
+	    final List<String> list = new ArrayList<String>();
+	    list.add(a);
+	    list.add(b);
+	    Machine m = new Machine();
+	    assertEquals(m.execute(list), 65535);
+	  }
+	  
+	  @Test public void EC9B2()
+	  {
+		String a="MOV R3 -65535;";
+		String b="RET R3;";
+	    final List<String> list = new ArrayList<String>();
+	    list.add(a);
+	    list.add(b);
+	    Machine m = new Machine();
+	    assertEquals(m.execute(list), -65535);
+	  }
+	  
+	  @Test(expected=InvalidInstructionException.class)
+	    public void EC10B1()
+	  {
+		String a="MOV R3 -65536";
+		String b="RET R3;";
+	    final List<String> list = new ArrayList<String>();
+	    list.add(a);
+	    list.add(b);
+	    Machine m = new Machine();
+	    assertEquals("Invalid",m.execute(list),InvalidInstructionException.class);
+	  }
+	  
+	  @Test(expected=InvalidInstructionException.class) 
+	  public void EC10B2()
+	  {
+		String a="MOV R3 65536";
+		String b="RET R3;";
+	    final List<String> list = new ArrayList<String>();
+	    list.add(a);
+	    list.add(b);
+	    Machine m = new Machine();
+	    assertEquals("Invalid",m.execute(list),InvalidInstructionException.class);
+	  }
+	  
+	  @Test(expected=InvalidInstructionException.class)
+	  
+	  
+	  public void EC12B1()
+	  {
+		    String a="MOV R1 0;";
+		    String b="MOV R2 7;";
+		    String c="LDR R2 R1 65536;";
+		    String d="RET R2;";
 
-  //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);
-  }
+		    final List<String> list = new ArrayList<String>();
+		    list.add(a);
+		    list.add(b);
+		    list.add(c);
+		    list.add(d);
+		    Machine m = new Machine();
+		    assertEquals("Invalid",m.execute(list),InvalidInstructionException.class);
+	  }
+	  
+	  @Test(expected=InvalidInstructionException.class)
+	  public void EC12B2()
+	  {
+		    String a="MOV R1 0;";
+		    String b="MOV R2 7;";
+		    String c="LDR R2 R1 -65536;";
+		    String d="RET R2;";
+
+		    final List<String> list = new ArrayList<String>();
+		    list.add(a);
+		    list.add(b);
+		    list.add(c);
+		    list.add(d);
+		    Machine m = new Machine();
+		    assertEquals("Invalid",m.execute(list),InvalidInstructionException.class);
+	  }
+	  @Test(expected=NoReturnValueException.class)
+	   public void EC14B1()
+	   {
+	 	    String b="JMP 65535;";
+	 	    final List<String> list = new ArrayList<String>();
+	 	    list.add(b);
+	 	    Machine m = new Machine();
+	 	    assertEquals("Invalid",m.execute(list),NoReturnValueException.class);
+	   }
+	   
+	  @Test(expected=NoReturnValueException.class)
+	   public void EC14B2()
+	   {
+	 	    String b="JMP -65535;";
+	 	    final List<String> list = new ArrayList<String>();
+	 	    list.add(b);
+	 	    Machine m = new Machine();
+	 	    assertEquals("Invalid",m.execute(list),NoReturnValueException.class);
+	   }
+	   
+	  
+	  @Test(expected=InvalidInstructionException.class)
+	  public void EC15B1()
+	  {
+		    String b="JMP -65536;";
+		    final List<String> list = new ArrayList<String>();
+		    list.add(b);
+		    Machine m = new Machine();
+		    assertEquals("Invalid",m.execute(list),InvalidInstructionException.class);
+	  }
+	  
+	  @Test(expected=InvalidInstructionException.class)
+	  public void EC15B2()
+	  {
+		    String b="JMP 65536;";
+		    final List<String> list = new ArrayList<String>();
+		    list.add(b);
+		    Machine m = new Machine();
+		    assertEquals("Invalid",m.execute(list),InvalidInstructionException.class);
+	  }
+
+	  /*
+	   * [EC16]: {list|length>1/\INSTUCTION=LDR/\regsi in [R0,R1,...,R31]/\vali in[-65536,65535]/\reg[a]+offs>65535} invalid
+	MOV R1 1; MOV R2 7; LDR R2 R1 65535; RET R2;
+	   */
+	  
+	  @Test(expected=InvalidInstructionException.class)
+	  public void EC16()
+	  {
+		    String a="MOV R1 1;";
+		    String b="MOV R2 7;";
+		    String c="LDR R2 R1 65535;";
+		    String d="RET 0;";
+		    final List<String> list = new ArrayList<String>();
+		    list.add(a);
+		    list.add(b);
+		    list.add(c);
+		    list.add(d);
+		    Machine m = new Machine();
+		    assertEquals("Invalid",m.execute(list),InvalidInstructionException.class);
+	  }
+	  
+	  
+	  @Test
+	  public void EC17B1()
+	  {
+		    String a="MOV R1 1;";
+		    String b="MOV R2 7;";
+		    String c="LDR R2 R1 65534;";
+		    String d="RET R2;";
+		    final List<String> list = new ArrayList<String>();
+		    list.add(a);
+		    list.add(b);
+		    list.add(c);
+		    list.add(d);
+		    Machine m = new Machine();
+		    assertEquals(m.execute(list),0);
+	  }
+	  
+	  @Test
+	  public void EC17B2()
+	  {
+		    String a="MOV R1 0;";
+		    String b="MOV R2 7;";
+		    String c="LDR R2 R1 0;";
+		    String d="RET R2;";
+		    final List<String> list = new ArrayList<String>();
+		    list.add(a);
+		    list.add(b);
+		    list.add(c);
+		    list.add(d);
+		    Machine m = new Machine();
+		    assertEquals(m.execute(list),0);
+	  }
+
+	  @Test
+	  public void EC18()
+	  {
+		    String a="MOV R1 -1;";
+		    String b="MOV R2 7;";
+		    String c="LDR R2 R1 0;";
+		    String d="RET R2;";
+		    final List<String> list = new ArrayList<String>();
+		    list.add(a);
+		    list.add(b);
+		    list.add(c);
+		    list.add(d);
+		    Machine m = new Machine();
+		    assertEquals(m.execute(list),7);
+	  }
+	  
 
-  //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;
-  }
 }
-- 
GitLab