From c5ddf1407c3ebe944d0614698cfbb60cf44474ea Mon Sep 17 00:00:00 2001
From: Abdul Mateen Ahmad Khan <a.khan21@student.unimelb.edu.au>
Date: Sun, 2 Sep 2018 15:41:02 +1000
Subject: [PATCH] Update PartitioningTests.java

---
 test/swen90006/machine/PartitioningTests.java | 702 +++++++++++++++++-
 1 file changed, 677 insertions(+), 25 deletions(-)

diff --git a/test/swen90006/machine/PartitioningTests.java b/test/swen90006/machine/PartitioningTests.java
index 5494b44..c7c86a6 100644
--- a/test/swen90006/machine/PartitioningTests.java
+++ b/test/swen90006/machine/PartitioningTests.java
@@ -24,41 +24,693 @@ public class PartitioningTests
   {
   }
 
-  //Any method annotation with "@Test" is executed as a test.
-  @Test public void aTest()
+  @Test public void E1()
   {
-    //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 FOR #  OF INSTRUCTION 1 WITH RET. 
+    Machine m = new Machine();
+    final List<String> lines1= new ArrayList<>();
+            lines1.add("RET R1");
+          assertEquals( m.execute(lines1), 0);
   }
-
-  @Test public void anotherTest()
+  
+  
+  
+  
+  
+  @Test(expected = NoReturnValueException.class) 
+  public void E2()
+  throws Throwable
+{
+	  // TEST FOR #  OF INSTRUCTION 1 WITH NO RET. 
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("ADD R1 R2 R3");
+	  m.execute(lines1);
+  
+}
+  
+  @Test public void E3()
+ 
+{
+	  // TEST FOR #  OF INSTRUCTION >1 WITH ADD AND REGISTER VALUE VALID . 
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("MOV R2 2");
+	  lines1.add("MOV R3 5");
+	  lines1.add("ADD R1 R2 R3");
+	 
+	  
+	  lines1.add("RET R1");
+	  
+	  
+	  assertEquals( m.execute(lines1), 7);
+  
+}
+  
+  @Test public void E6()
+  
   {
-    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 FOR #  OF INSTRUCTION >1 WITH SUB AND REGISTER VALUE VALID .  
+  	  Machine m = new Machine();
+  	  final List<String> lines1= new ArrayList<>();
+  	  lines1.add("MOV R2 2");
+	  lines1.add("MOV R3 5");
+  	  lines1.add("SUB R1 R2 R3");
+  	  lines1.add("RET R1");
+  	  
+  	  
+  	  assertEquals( m.execute(lines1), -3);
+    
+  }
+  
+  
+  @Test public void E7()
+  
+  {
+  	  // TEST FOR #  OF INSTRUCTION >1 WITH MUL AND REGISTER VALUE VALID .  
+  	  Machine m = new Machine();
+  	  final List<String> lines1= new ArrayList<>();
+  	  lines1.add("MOV R2 2");
+	  lines1.add("MOV R3 5");
+  	  lines1.add("MUL R1 R2 R3");
+  	  lines1.add("RET R1");
+  	  
+  	  
+  	  assertEquals( m.execute(lines1), 10);
+    
+  }
+  
+  @Test public void E8()
+  
+  {
+  	  // TEST FOR #  OF INSTRUCTION >1 WITH DIV AND REGISTER VALUE VALID .  
+  	  Machine m = new Machine();
+  	  final List<String> lines1= new ArrayList<>();
+  	  lines1.add("MOV R2 10");
+	  lines1.add("MOV R3 5");
+  	  lines1.add("DIV R1 R2 R3");
+  	  lines1.add("RET R1");
+  	  
+  	  
+  	  assertEquals( m.execute(lines1), 2);
+    
+  }
+  
+  
+@Test public void E9()
+  
+  {
+  	  // TEST FOR #  RET with value valid  
+  	  Machine m = new Machine();
+  	  final List<String> lines1= new ArrayList<>();
+  	  lines1.add("MOV R2 10");
+	  lines1.add("MOV R3 5");
+  	  lines1.add("DIV R1 R2 R3");
+  	  lines1.add("RET R1");
+  	  
+  	  
+  	  assertEquals( m.execute(lines1), 2);
+    
   }
+  
+  @Test(expected = InvalidInstructionException.class) 
+  public void E4()
+  throws Throwable
+{
+	  // TEST FOR #  OF INSTRUCTION >1 WITH add AND REGISTER VALUE inVALID  
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("ADD R33 R2 R3");
+	  lines1.add("RET R3");
+	  
+	  m.execute(lines1);
+  
+}
+  
+  @Test(expected = InvalidInstructionException.class) 
+  public void E5()
+  throws Throwable
+{
+	  // TEST FOR #  OF INSTRUCTION >1 WITH add AND REGISTER VALUE inVALID  
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("ADD R-4 R2 R3");
+	  lines1.add("RET R3");
+	  
+	  m.execute(lines1);
+  
+}
+  
+ 
+  @Test(expected = InvalidInstructionException.class) 
+  public void E13()
+  throws Throwable
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH MOV AND REGISTER VALUE inVALID 
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("MOV R34 34");
+	  m.execute(lines1);
+  
+}
+  
+  @Test(expected = InvalidInstructionException.class) 
+  public void E14()
+  throws Throwable
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH MOV AND REGISTER VALUE inVALID 
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("MOV R-1 34");
+	  m.execute(lines1);
+  
+}
+  
+  
+  @Test public void E10()
+ 
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH MOV AND REGISTER VALUE VALID AND VAL VALID
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("MOV R31 34");
+	  lines1.add("RET R31");
+	  assertEquals( m.execute(lines1), 34);
+  
+}
 
-  //Test test opens a file and executes the machine
-  @Test public void aFileOpenTest()
+  
+  @Test(expected = InvalidInstructionException.class) 
+  public void E11()
+  throws Throwable
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH MOV AND REGISTER VALUE VALID AND VAL INVALID
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("MOV R31 65538");
+	  lines1.add("RET R31");
+	  m.execute(lines1);
+  
+}
+
+  @Test(expected = InvalidInstructionException.class) 
+  public void E12()
+  throws Throwable
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH MOV AND REGISTER VALUE VALID AND VAL INVALID
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("MOV R31 -65538");
+	  lines1.add("RET R31");
+	  m.execute(lines1);
+  
+}
+
+  @Test(expected = InvalidInstructionException.class) 
+  public void E17()
+  throws Throwable
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH STR AND REGISTER VALUE INVALID 
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("STR R31 R45 -655");
+	  lines1.add("RET R31");
+	  m.execute(lines1);
+  
+}
+  
+  @Test(expected = InvalidInstructionException.class) 
+  public void E18()
+  throws Throwable
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH STR AND REGISTER VALUE INVALID 
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("STR R-31 R45 -655");
+	  lines1.add("RET R31");
+	  m.execute(lines1);
+  
+}
+  
+  
+  
+  @Test(expected = InvalidInstructionException.class) 
+  public void E19()
+  throws Throwable
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH STR AND REGISTER VALUE VALID AND VAL INVALID
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("STR R31 R4 -655444");
+	  lines1.add("RET R31");
+	  m.execute(lines1);
+  
+}
+  
+  
+  @Test(expected = InvalidInstructionException.class) 
+  public void E20()
+  throws Throwable
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH STR AND REGISTER VALUE VALID AND VAL INVALID
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("STR R31 R4 655444");
+	  lines1.add("RET R31");
+	  m.execute(lines1);
+  
+}
+  
+ 
+  @Test public void E15()
+  
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH STR AND REGISTER VALUE VALID AND VAL VALID;
+	  //TESTING LDR FUNCTIONALITY & b+v inside the given range
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("MOV R1 5");
+	  lines1.add("MOV R4 2");
+	  lines1.add("STR R4 3 R1");
+	  lines1.add("LDR R2 R4 3");
+	  
+	  lines1.add("RET R2");
+	  assertEquals( m.execute(lines1), 5);
+	
+  
+}
+  
+  @Test public void E16_1()
+  
   {
-    final List<String> lines = readInstructions("examples/array.s");
-    Machine m = new Machine();
-    assertEquals(m.execute(lines), 45);
+  	// TEST FOR #  OF INSTRUCTION >1 WITH STR AND REGISTER VALUE VALID AND VAL VALID;
+  	  //TESTING LDR FUNCTIONALITY & b+v less then 0
+  	  Machine m = new Machine();
+  	  final List<String> lines1= new ArrayList<>();
+  	lines1.add("MOV R1 5");
+  	  lines1.add("MOV R4 -7");
+  	  lines1.add("STR R4 3 R1");
+  	  lines1.add("LDR R2 R4 3");
+  	  
+  	  lines1.add("RET R2");
+  	  assertEquals( m.execute(lines1), 0);
+  	
+    
   }
   
-  //To test an exception, specify the expected exception after the @Test
-  @Test(expected = java.io.IOException.class) 
-    public void anExceptionTest()
-    throws Throwable
+@Test public void E16_2()
+  
   {
-    throw new java.io.IOException();
+  	// TEST FOR #  OF INSTRUCTION >1 WITH STR AND REGISTER VALUE VALID AND VAL VALID;
+  	  //TESTING LDR FUNCTIONALITY & b+v greater then 65535
+  	  Machine m = new Machine();
+  	  final List<String> lines1= new ArrayList<>();
+  	  lines1.add("MOV R1 5");
+  	  lines1.add("MOV R4 65535");
+  	  lines1.add("STR R4 78 R1");
+  	  lines1.add("LDR R2 R4 78");
+  	  
+  	  lines1.add("RET R2");
+  	  assertEquals( m.execute(lines1), 0);
+  	
+    
   }
+  
+ 
+
+
+
+
+
+
+@Test public void E21()
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH LDR AND REGISTER VALUE VALID AND VAL VALID;
+	  //TESTING LDR FUNCTIONALITY & b+v inside the given range
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add("MOV R1 5");
+	  lines1.add("MOV R4 2");
+	  lines1.add("STR R4 3 R1");
+	  lines1.add("LDR R2 R4 3");
+	  
+	  lines1.add("RET R2");
+	  assertEquals( m.execute(lines1), 5);
+	
+
+}
+
+
+
+
+@Test (timeout = 5000)
+ public void E23()
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH JMP vAL=1
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" MOV R1 1");
+	  lines1.add(" JMP 1");
+	  lines1.add(" MOV R1 2");
+	 
+	  
+	  
+	  lines1.add("RET R1");
+	  assertEquals( m.execute(lines1), 2);
+	
+  
+}
+@Test (timeout = 5000)
+ public void E22()
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH JMP vAL=0
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" MOV R1 1");
+	  lines1.add(" JMP 0");
+	  lines1.add(" MOV R1 2");
+	 
+	  
+	  
+	  lines1.add("RET R1");
+	  assertEquals( m.execute(lines1), 2);
+	
+  
+}
+
+@Test (timeout = 5000)
+public void E24()
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH JMP AND VAL +PC  IS WITH IN THE RANGE
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" MOV R1 1");
+	  lines1.add(" JMP 2");
+	  lines1.add(" MOV R1 3");
+	  lines1.add(" MOV R2 5");
+	  
+	 
+	  
+	  
+	  lines1.add("RET R1");
+	  assertEquals( m.execute(lines1), 1);
+	
+  
+}
+
+@Test(timeout = 5000, expected = NoReturnValueException.class) 
+public void E25()
+throws Throwable
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH JMP AND VAL +PC  IS LESS THEN 0
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" MOV R1 1");
+	  lines1.add(" JMP -3");
+	  lines1.add("RET R1");
+	  m.execute(lines1);
+	 
+	
+  
+}
+
+@Test(timeout = 5000,expected = NoReturnValueException.class) 
+public void E26()
+throws Throwable
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH JMP AND VAL +PC  IS GRETER THEN N-1
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" MOV R1 1");
+	  lines1.add(" JMP 79");
+	  lines1.add("RET R1");
+	  m.execute(lines1);
+	 
+	
+  
+}
+
+@Test(timeout = 5000,expected = InvalidInstructionException.class) 
+public void E27()
+throws Throwable
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH  JMP AND VAL IN VALID
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" JMP 7900000");
+	  lines1.add("RET R1");
+	  m.execute(lines1);
+	 
+	
+  
+}
+
+
+@Test(timeout = 5000, expected = InvalidInstructionException.class) 
+public void E28()
+throws Throwable
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH  JMP AND VAL IN VALID
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" JMP -678888");
+	  lines1.add("RET R1");
+	  m.execute(lines1);
+	 
+	
+  
+}
+
+
+@Test(timeout = 5000, expected = InvalidInstructionException.class) 
+public void E29()
+throws Throwable
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH JZ AND  REGISTER IN VALID
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" JZ R56 2");
+	  lines1.add("RET R1");
+	  m.execute(lines1);
+	 
+	
+  
+}
+
+@Test(timeout = 5000,expected = InvalidInstructionException.class) 
+public void E30()
+throws Throwable
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH JZ AND  REGISTER IN VALID
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" JZ R-4 2");
+	  lines1.add("RET R1");
+	  m.execute(lines1);
+	 
+	
+  
+}
+ 
+@Test(timeout = 5000,expected = InvalidInstructionException.class) 
+public void E31()
+throws Throwable
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH  JMP AND VAL IN VALID
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" JZ R5 2899898");
+	  lines1.add("RET R1");
+	  m.execute(lines1);
+	 
+	
+  
+}
+  
+
+@Test(timeout = 5000,expected = InvalidInstructionException.class) 
+public void E32()
+throws Throwable
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH  JMP AND VAL IN VALID
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" JZ R5 -2899898");
+	  lines1.add("RET R1");
+	  m.execute(lines1);
+	 
+	
+  
+}
+  
+
+@Test (timeout = 5000)
+public void E34()
+
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH  JMP  AND VAL VALID AND R1=0 AND VAL +PC WITH IN RANGE AND RET =1
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" MOV R1 0");
+	  lines1.add(" JZ R1 2");
+	  lines1.add(" MOV R1 3");
+	  lines1.add(" RET R1");
+	 
+	  
+	  
+	 
+	  assertEquals(m.execute(lines1),0);
+	 
+}
+@Test (timeout = 5000)
+public void E33()
+
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH  JMP  AND VAL VALID AND R1!=0 
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" MOV R1 1");
+	  lines1.add(" JZ R1 2");
+	  lines1.add(" MOV R1 3");
+	  lines1.add(" RET R1");
+	 
+	  
+	  
+	 
+	  assertEquals(m.execute(lines1),3);
+	 
+	
+  
+}
+  
+@Test(timeout = 5000, expected = NoReturnValueException.class) 
+public void E35()
+throws Throwable
+
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH  JMP  AND VAL VALID AND R1=0 AND VAL +PC <0
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" MOV R1 0");
+	  lines1.add(" JZ R1 -3");
+	  lines1.add(" MOV R1 3");
+	  lines1.add(" RET R1");
+	 
+	  
+	  
+	 
+	 m.execute(lines1);
+	 
+	
+  
+}
+@Test(timeout = 5000, expected = NoReturnValueException.class) 
+public void E36()
+throws Throwable
+
+
+{
+	// TEST FOR #  OF INSTRUCTION >1 WITH  JMP  AND VAL VALID AND R1=0 AND VAL +PC >0
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" MOV R1 0");
+	  lines1.add(" JZ R1 78");
+	  lines1.add(" MOV R1 3");
+	  lines1.add(" RET R1");
+	 
+	  
+	  
+	 
+	 m.execute(lines1);
+}
+   
+@Test(expected = InvalidInstructionException.class) 
+public void E37()
+throws Throwable
+
+
+{
+	// TEST FOR   INVALID INSTRUCTION
+	  Machine m = new Machine();
+	  final List<String> lines1= new ArrayList<>();
+	  lines1.add(" MOVTY R1 0");
+	  lines1.add(" RET R1");
+	 
+	  
+	  
+	 
+	 m.execute(lines1);
+}
+
+
+@Test (timeout = 5000)
+
+public void E38()
+
+
+{
+	
+	// TEST FOR #  OF INSTRUCTION >1 WITH  JMP  AND VAL VALID AND R1=0 AND VAL +PC WITH IN RANGE AND RET >1
+		  Machine m = new Machine();
+		  final List<String> lines1= new ArrayList<>();
+		  lines1.add(" MOV R1 0");
+		  lines1.add(" JZ R1 2");
+		  lines1.add(" MOV R2 3");
+		  lines1.add(" MOV R4 3");
+		  lines1.add(" RET R2");
+		  lines1.add(" RET R2");
+	 
+	  
+	  
+	 
+	  assertEquals(m.execute(lines1),0);
+	 
+	
+  
+}
+  
+@Test( timeout = 5000 ,expected = NoReturnValueException.class) 
+public void E39()
+throws Throwable
+
+{
+	
+	// TEST FOR #  OF INSTRUCTION >1 WITH  JMP  AND VAL VALID AND R1=0 AND VAL +PC WITH IN RANGE AND RET =0
+		  Machine m = new Machine();
+		  final List<String> lines1= new ArrayList<>();
+		  lines1.add(" MOV R1 0");
+		  lines1.add(" JZ R1 5");
+		  lines1.add(" MOV R1 3");
+		 
+		  
+	 
+	  
+	  
+	 
+	  m.execute(lines1);
+	 
+	
+  
+}
+  
+  
+  
 
   //This test should fail.
   //To provide additional feedback when a test fails, an error message
-- 
GitLab