From f2237160efd7dcdc69955696093696636fb1c89b Mon Sep 17 00:00:00 2001
From: Xixiang Wu <xixiangwu0108@gmail.com>
Date: Sun, 2 Sep 2018 14:27:17 +1000
Subject: [PATCH] Finalise the assignment

---
 TEST-swen90006.machine.BoundaryTests.txt      |  16 +
 TEST-swen90006.machine.PartitioningTests.txt  |  26 ++
 classes/swen90006/machine/BoundaryTests.class | Bin 2225 -> 3858 bytes
 .../swen90006/machine/PartitioningTests.class | Bin 2229 -> 6249 bytes
 .../mutant-1/swen90006/machine/Machine.java   |   2 +-
 .../mutant-2/swen90006/machine/Machine.java   |   2 +-
 .../mutant-3/swen90006/machine/Machine.java   |   2 +-
 .../mutant-4/swen90006/machine/Machine.java   |   2 +-
 .../mutant-5/swen90006/machine/Machine.java   |   2 +-
 test/swen90006/machine/BoundaryTests.java     | 127 +++++++-
 test/swen90006/machine/PartitioningTests.java | 304 +++++++++++++++++-
 11 files changed, 464 insertions(+), 19 deletions(-)
 create mode 100644 TEST-swen90006.machine.BoundaryTests.txt
 create mode 100644 TEST-swen90006.machine.PartitioningTests.txt

diff --git a/TEST-swen90006.machine.BoundaryTests.txt b/TEST-swen90006.machine.BoundaryTests.txt
new file mode 100644
index 0000000..478cada
--- /dev/null
+++ b/TEST-swen90006.machine.BoundaryTests.txt
@@ -0,0 +1,16 @@
+Testsuite: swen90006.machine.BoundaryTests
+Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.266 sec
+
+Testcase: register_min_on_point_boundary_test took 0.003 sec
+Testcase: register_min_off_point_boundary_test took 0.001 sec
+Testcase: register_max_off_point_boundary_test took 0 sec
+Testcase: value_min_off_point_boundary_test took 0 sec
+Testcase: value_min_on_point_boundary_test took 0.001 sec
+Testcase: value_max_off_point_boundary_test took 0.001 sec
+Testcase: anotherTest took 0 sec
+Testcase: aFileOpenTest took 0.026 sec
+Testcase: aTest took 0 sec
+Testcase: overflow_max_on_point_boundary_test took 0.21 sec
+Testcase: register_max_on_point_boundary_test took 0 sec
+Testcase: anExceptionTest took 0 sec
+Testcase: value_max_on_point_boundary_test took 0 sec
diff --git a/TEST-swen90006.machine.PartitioningTests.txt b/TEST-swen90006.machine.PartitioningTests.txt
new file mode 100644
index 0000000..ca17684
--- /dev/null
+++ b/TEST-swen90006.machine.PartitioningTests.txt
@@ -0,0 +1,26 @@
+Testsuite: swen90006.machine.PartitioningTests
+Tests run: 23, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.072 sec
+
+Testcase: mov_para_test took 0.002 sec
+Testcase: arith_add_para_test took 0.001 sec
+Testcase: arith_div_test took 0 sec
+Testcase: ldr_str_jmp_jz_test took 0.007 sec
+Testcase: ret_para_test took 0 sec
+Testcase: arith_mul_test took 0.001 sec
+Testcase: arith_sub_para_test took 0 sec
+Testcase: ret_test took 0 sec
+Testcase: anotherTest took 0.001 sec
+Testcase: mov_test took 0 sec
+Testcase: aFileOpenTest took 0.024 sec
+Testcase: aTest took 0 sec
+Testcase: ldr_para_test took 0 sec
+Testcase: str_para_test took 0 sec
+Testcase: arith_mul_para_test took 0 sec
+Testcase: arith_div_para_test took 0.001 sec
+Testcase: arith_sub_test took 0.001 sec
+Testcase: jz_para_test took 0 sec
+Testcase: jmp_para_test took 0.001 sec
+Testcase: anExceptionTest took 0 sec
+Testcase: no_retrun_test took 0 sec
+Testcase: arith_add_test took 0.001 sec
+Testcase: infiniteLoop took 2.005 sec
diff --git a/classes/swen90006/machine/BoundaryTests.class b/classes/swen90006/machine/BoundaryTests.class
index 75ca15dbf4f906cd2b7beec235fa91a8de079579..e8ed9ab0dd8ee8922dea435dfe500460a20698bd 100644
GIT binary patch
literal 3858
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

delta 1114
zcmbOvw^6YE)W2Q(7#J9g8M?U`)EJyu86bd(i@}A#m7T$ji-DEFnS;Tdo56#@lY_wv
zM0<lIeK;6=xfoO#{MZ@%xfu8uoIykYOusHWLm(G}Fi2|<OpF<%EtrELgo`1RA&iS5
zoFRf;har-SA&McIiy?*~mYpGvlOdiVfrBBDiy?_2nTtW5A%%+}o*|W;A&s3OeX<~9
z_hfTs1A8vlisaOSlFa<PVs?fMMh1@5ih|VSlGGGN22r1^#Ii*F%zS-Mf4C}ZMh5Og
zx5Uhx)Rd6a;*!a=%s#wn><p3Y44Lc<S?mmPldmy*2CFk@urp-yFyt`gGBOB*jVUe3
z%+Yr&DoU*M$t*5mWME8WXUO7V$YaQ7WME9<VJKk8=V2&hC}Ly~NUccBEyzhN)=vZ}
z*DK~>uw<~B9LFM8U(8SfGY{2Sj0_^d`MIeIX^ELRrA4U<xv9m)iRq~z7nCwGu!e@X
z=~}QeWb!bSF_g12RPZoVGE^}#2!LIdlbDyTA6!zDnU~JaP|d?o!%)l4P{+ei&(Hv~
z46MYpf*%@G><o=O3{4EplT+Dr1zLC*S{d4S7}^;+co;evx+X7TJ2<(SU14$xyS$jV
z1|$%{20-kv_VU_1kNrDiy()tmIE8RBFfyn!XfQA`XfiM`2r@7-FfuSOuxf2*VB82+
zz{sG*puxZdmgZ$(082xqv>6x}*cccYbil&8gp}!lmFa_()q`vkV_;!mW?*385@BEx
zVPM+9zyh%nX08EPgCST0NWBpQ69W?i1B2Rb2G+>!3~WByLhL&kIG7m1wS_og4ECK2
zTucl*7`U;SWdt*;o<Rd@xr~+&&vpi0pWO_6k=q&geRZ_AF$lDZFbLvsjxmD<12Z@@
zL>QRBp~116K{#?dgUEhxc$qLTFt9K%GMF-eyur=D$Y8+0$Y7StV9vnEV1ck-f`Jw6
zc^)BAu=mAwFi2oJnF*BoprN0}z{~*3gT_LVI~b&V8U1!JNNY3iWsup%Agi;3LC$YE
zgQOM9CI$r|#cd2qk|5SL24$8V3@W-C7#JBi7$g{^8RQul8LSx?R2d{0nEo?JGqA8T
f*swF$vNPDRGuSgQvNJe{GB`3YFfcJVF)#oCUZ=KT

diff --git a/classes/swen90006/machine/PartitioningTests.class b/classes/swen90006/machine/PartitioningTests.class
index af52566636122d3ab4edeca3dfd4fb3e867aa1db..ccd57eec247887c54a805dc451aa27ff7c49f306 100644
GIT binary patch
literal 6249
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

delta 1095
zcmaE9uvM`B)W2Q(7#J9g8M?U`)EJyu86bd(i@}A#m7T$ji-DEFnS;Tdo56#@lY_wv
zM0<lIeK;6=xfoO#{MZ@%xfu8uoIykYOusHWLm(G}Fi2|<OpF<%EtrELgo`1RA&iS5
zoFRf;har-SA&McIiy?*~mYpGvlOdiVfrBBDiy?_2nTtW5A%%+}o*|W;A&s3OeeyBJ
z0!h}ykksN5Mg{?&{GxRItkS&95`B<}^<-rhBYQ5_isaOSlFa<PVs?fMMh1@5ih|VS
zlGGGN22r1^#Ii*F%zS-Mf4C}ZMh5Ogx5Uhx)D(~*le1a8`9O9>vNL3|Gi0$d#7#cJ
z;>oSfpux_N&BKtxkULp`Rl<NVk)0unharz4pOJwviHD(pA)kk#kfDf?K_ImvF}ENm
zwOBu~s3@^gub79ylEG?n6{{=@Loq|i<ntU7p(4Tgxv2_iiJ3X2MX3t8sl~;K>8T*Y
zOBoqhLqptjE!Y_{c^JwV%Gntzco-@fsu&prz>d#J%uCk~E-A{)OJ`@O=3%H|sAXrU
z<6)?0Xqc?PDbCK&$ivXY&^+0WQ%8iMg@>V)p^b;3ouPw=p_8GDkwJN~Jcsh+g`DA&
z&A7BC|KOC9<w(xYD@n}ED`sTiN-Qo;Eh-5qDotf%V9|)u44W*%rNk&cxsgSf#mh@G
zZ1WecuZ+T~3~Jyc!pXqMpw6Jdz{sFE`45joy%vK80~3QL0|Nsu0|Nsi2yX-{)Mj8{
zU}Iop&;bcC=n_(<2UeyJS0={5!obYHz`!NKz$C)Jw1a^K)mQ_tdc%6S1|tS01||ju
z2DRM`tdZLp*nG5w*mp8;FfoK{3vt32>^m8_m>702aAPyf2yT`J)N&auA)f6Fygs`b
z_#(G6@cZg$Z(|T>6=4vBJEtDzO^ADp88jG}!J#3-zyuBrj@=Bxk=q$W_Jae(gn@y9
zg@KX5lmVoVn}LzRfPs<0ESbTafsw%iZodQrE7<cqLZV>ri|t^Lz;rPagC#?y6*TnI
z7?>GAInG!}atDKyFQeZM25D{Py$mwj7-V&JFv$5WXOOgF*~FkAq_~YiNfN}`#-Ply
zgF!`i0|O%i2ZIEIG=n??BZD;q1A`<3(|-nO1{QV(8+Ha;b_P3k273lZb_NGg21f=4
K1||k41_l6Zd9k(t

diff --git a/mutants/mutant-1/swen90006/machine/Machine.java b/mutants/mutant-1/swen90006/machine/Machine.java
index 9bf5731..9f8349f 100644
--- a/mutants/mutant-1/swen90006/machine/Machine.java
+++ b/mutants/mutant-1/swen90006/machine/Machine.java
@@ -106,7 +106,7 @@ public class Machine
 
   private int parseReg(String s) throws InvalidInstructionException
   {
-    if (s.length() < 2){
+    if (s.length() <= 2){
       throw new InvalidInstructionException();
     }
     if (s.charAt(0) != 'r'){
diff --git a/mutants/mutant-2/swen90006/machine/Machine.java b/mutants/mutant-2/swen90006/machine/Machine.java
index 9bf5731..e0040cf 100644
--- a/mutants/mutant-2/swen90006/machine/Machine.java
+++ b/mutants/mutant-2/swen90006/machine/Machine.java
@@ -266,7 +266,7 @@ public class Machine
 	  throw new InvalidInstructionException();
 	}
 	int offs = parseOffset(toks[1]);
-	pc  = pc + offs;
+	pc  = pc - offs;
 	count++;
 	continue; /* avoid default increment of pc below */
       } else if (toks[0].equals(INSTRUCTION_JZ)){
diff --git a/mutants/mutant-3/swen90006/machine/Machine.java b/mutants/mutant-3/swen90006/machine/Machine.java
index 9bf5731..ac758b2 100644
--- a/mutants/mutant-3/swen90006/machine/Machine.java
+++ b/mutants/mutant-3/swen90006/machine/Machine.java
@@ -287,7 +287,7 @@ public class Machine
 	throw new InvalidInstructionException();
       }
       count++;
-      pc = pc + 1;
+      pc = pc / 1;
     }
 
     /* got here without returning already... */
diff --git a/mutants/mutant-4/swen90006/machine/Machine.java b/mutants/mutant-4/swen90006/machine/Machine.java
index 9bf5731..b5e30fe 100644
--- a/mutants/mutant-4/swen90006/machine/Machine.java
+++ b/mutants/mutant-4/swen90006/machine/Machine.java
@@ -278,7 +278,7 @@ public class Machine
 	if (regs[ra] == 0){
 	  pc = pc + offs;
 	}else{
-	  pc = pc + 1;
+	  pc = pc * 1;
 	}
 	count++;
 	continue; /* avoid default increment the pc below */
diff --git a/mutants/mutant-5/swen90006/machine/Machine.java b/mutants/mutant-5/swen90006/machine/Machine.java
index 9bf5731..fa8eff7 100644
--- a/mutants/mutant-5/swen90006/machine/Machine.java
+++ b/mutants/mutant-5/swen90006/machine/Machine.java
@@ -278,7 +278,7 @@ public class Machine
 	if (regs[ra] == 0){
 	  pc = pc + offs;
 	}else{
-	  pc = pc + 1;
+	  pc = pc / 1;
 	}
 	count++;
 	continue; /* avoid default increment the pc below */
diff --git a/test/swen90006/machine/BoundaryTests.java b/test/swen90006/machine/BoundaryTests.java
index 61ce1ca..c386916 100644
--- a/test/swen90006/machine/BoundaryTests.java
+++ b/test/swen90006/machine/BoundaryTests.java
@@ -34,6 +34,119 @@ public class BoundaryTests
     assertEquals(expected, actual);
   }
 
+  @Test
+  public void value_min_on_point_boundary_test() {
+    ArrayList var1 = new ArrayList();
+    var1.add("MOV R1 -65535");
+    var1.add("RET R1");
+    Machine var2 = new Machine();
+    Assert.assertEquals((long)var2.execute(var1), -65535);
+  }
+
+  @Test(expected = InvalidInstructionException.class)
+  public void value_min_off_point_boundary_test()
+          throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R1 -65536");
+    lines.add("RET R1");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  @Test
+  public void value_max_on_point_boundary_test() {
+    ArrayList var1 = new ArrayList();
+    var1.add("MOV R1 65535");
+    var1.add("RET R1");
+    Machine var2 = new Machine();
+    Assert.assertEquals((long)var2.execute(var1), 65535);
+  }
+
+
+  @Test(expected = InvalidInstructionException.class)
+  public void value_max_off_point_boundary_test()
+          throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R1 65536");
+    lines.add("RET R1");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  @Test(expected = InvalidInstructionException.class)
+  public void register_max_off_point_boundary_test()
+          throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R-1 1");
+    lines.add("RET R-1");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  @Test(expected = InvalidInstructionException.class)
+  public void register_min_off_point_boundary_test()
+          throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R32 1");
+    lines.add("RET R32");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  @Test
+  public void register_min_on_point_boundary_test() {
+    ArrayList var1 = new ArrayList();
+    var1.add("MOV R0 1");
+    var1.add("RET R0");
+    Machine var2 = new Machine();
+    Assert.assertEquals((long)var2.execute(var1), 1);
+  }
+
+  @Test
+  public void register_max_on_point_boundary_test() {
+    ArrayList var1 = new ArrayList();
+    var1.add("MOV R31 1");
+    var1.add("RET R31");
+    Machine var2 = new Machine();
+    Assert.assertEquals((long)var2.execute(var1), 1);
+  }
+
+
+  // Should overflow, but the system does not give a correct answer?
+  @Test
+  public void overflow_max_on_point_boundary_test() {
+    ArrayList var1 = new ArrayList();
+    var1.add("MOV R3 4000");
+    var1.add("MOV R2 1");
+    var1.add("MOV R1 0");
+    var1.add("MOV R0 100");
+    var1.add("SUB R4 R3 R1");
+    var1.add("JZ  R4 5");
+    var1.add("STR R0 0  R1");
+    var1.add("ADD R1 R1 R2");
+    var1.add("ADD R0 R0 R2");
+    var1.add("JMP -5");
+    var1.add("MOV R1 0");
+    var1.add("MOV R0 100");
+    var1.add("MOV R5 0");
+    var1.add("SUB R4 R3 R1");
+    var1.add("JZ  R4 6");
+    var1.add("LDR R4 R0 0");
+    var1.add("ADD R5 R5 R4");
+    var1.add("ADD R0 R0 R2");
+    var1.add("ADD R1 R1 R2");
+    var1.add("JMP -6");
+    var1.add("RET R5");
+    Machine var2 = new Machine();
+    Assert.assertEquals((long)var2.execute(var1), 7998000);
+  }
+
+
+
   @Test public void anotherTest()
   {
     List<String> list = new ArrayList<String>();
@@ -63,13 +176,13 @@ public class BoundaryTests
   //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);
-  }
+//  @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
diff --git a/test/swen90006/machine/PartitioningTests.java b/test/swen90006/machine/PartitioningTests.java
index 5494b44..e86233a 100644
--- a/test/swen90006/machine/PartitioningTests.java
+++ b/test/swen90006/machine/PartitioningTests.java
@@ -6,8 +6,11 @@ import java.nio.charset.Charset;
 import java.nio.file.Path;
 import java.nio.file.Files;
 import java.nio.file.FileSystems;
+import java.util.concurrent.TimeoutException;
 
 import org.junit.*;
+import org.omg.CORBA.DynAnyPackage.Invalid;
+
 import static org.junit.Assert.*;
 
 public class PartitioningTests
@@ -24,6 +27,291 @@ public class PartitioningTests
   {
   }
 
+  // ======= 10 operands =======
+  // Arithmetic: ADD/SUB/MUL/DIV
+  @Test(expected = InvalidInstructionException.class)
+  public void arith_add_para_test()
+  throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R1 2");
+    lines.add("MOV R2 3");
+    lines.add("ADD R3 R1");
+    lines.add("ADD R3");
+    lines.add("ADD");
+    lines.add("ADD R3 R1 R4 R5");
+    lines.add("RET R3");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  @Test public void arith_add_test()
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R1 2");
+    lines.add("MOV R2 3");
+    lines.add("ADD R3 R1 R2");
+    lines.add("RET R3");
+    Machine m = new Machine();
+    assertEquals(m.execute(lines), 5);
+  }
+
+  @Test(expected = InvalidInstructionException.class)
+  public void arith_sub_para_test()
+          throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R1 2");
+    lines.add("MOV R2 3");
+    lines.add("SUB R3 R1");
+    lines.add("SUB R3");
+    lines.add("SUB");
+    lines.add("SUB R3 R1 R4 R5");
+    lines.add("RET R3");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  @Test public void arith_sub_test()
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R1 2");
+    lines.add("MOV R2 3");
+    lines.add("SUB R3 R1 R2");
+    lines.add("RET R3");
+    Machine m = new Machine();
+    assertEquals(m.execute(lines), -1);
+  }
+
+  @Test(expected = InvalidInstructionException.class)
+  public void arith_mul_para_test()
+          throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R1 2");
+    lines.add("MOV R2 3");
+    lines.add("MUL R3 R1");
+    lines.add("MUL R3");
+    lines.add("MUL");
+    lines.add("MUL R3 R1 R4 R5");
+    lines.add("RET R3");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  @Test public void arith_mul_test()
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R1 -2");
+    lines.add("MOV R2 -3");
+    lines.add("MUL R3 R1 R2");
+    lines.add("RET R3");
+    Machine m = new Machine();
+    assertEquals(m.execute(lines), 6);
+  }
+
+  @Test(expected = InvalidInstructionException.class)
+  public void arith_div_para_test()
+          throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R1 2");
+    lines.add("MOV R2 3");
+    lines.add("DIV R3 R1");
+    lines.add("DIV R3");
+    lines.add("DIV");
+    lines.add("DIV R3 R1 R4 R5");
+    lines.add("RET R3");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  @Test public void arith_div_test()
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R1 -9");
+    lines.add("MOV R2 3");
+    lines.add("DIV R3 R1 R2");
+    lines.add("RET R3");
+    Machine m = new Machine();
+    assertEquals(m.execute(lines), -3);
+  }
+
+  @Test(expected = InvalidInstructionException.class)
+  public void mov_para_test()
+          throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R1 2");
+    lines.add("MOV ");
+    lines.add("MOV R1");
+    lines.add("MOV 2");
+    lines.add("RET R3");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  @Test public void mov_test()
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R0 2");
+    lines.add("RET R0");
+    Machine m = new Machine();
+    assertEquals(m.execute(lines), 2);
+  }
+
+  @Test(expected = InvalidInstructionException.class)
+  public void ret_para_test()
+          throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("RET");
+    lines.add("RET R3 R1");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  @Test public void ret_test()
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("RET R0");
+    Machine m = new Machine();
+    assertEquals(m.execute(lines), 0);
+  }
+
+  @Test(expected = InvalidInstructionException.class)
+  public void ldr_para_test()
+          throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("LDR");
+    lines.add("LDR R1 2");
+    lines.add("LDR R1 R2 0 R3");
+    lines.add("RET R0");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  @Test(expected = InvalidInstructionException.class)
+  public void str_para_test()
+          throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("STR");
+    lines.add("STR 2");
+    lines.add("STR R1 3");
+    lines.add("STR R1 R2 0 R3");
+    lines.add("RET R0");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  @Test(expected = InvalidInstructionException.class)
+  public void jmp_para_test()
+          throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("JMP");
+    lines.add("JMP R1 3");
+    lines.add("JMP R1");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  @Test(expected = InvalidInstructionException.class)
+  public void jz_para_test()
+          throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("JZ");
+    lines.add("JZ 3");
+    lines.add("JZ R5");
+    lines.add("JZ R0 5 10");
+    lines.add("JZ 5 10");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  public void jmp_jz_pair_test()
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R3 10");
+    lines.add("MOV R2 1");
+    lines.add("MOV R1 0");
+    lines.add("MOV R0 100");
+    lines.add("SUB R4 R3 R1");
+    lines.add("JZ  R4 5");
+    lines.add("STR R0 0  R1");
+    lines.add("ADD R1 R1 R2");
+    lines.add("ADD R0 R0 R2");
+    lines.add("JMP -3");
+
+    lines.add("MOV R1 0");
+    lines.add("MOV R0 100");
+    lines.add("MOV R5 0");
+
+    lines.add("LDR R4 R0 2");
+    lines.add("ADD R5 R5 R4");
+
+    lines.add("RET R5");
+    Machine m = new Machine();
+    assertEquals(m.execute(lines), 0);
+  }
+
+  @Test
+  public void infiniteLoop() throws Exception {
+    Thread t = new Thread(new Runnable() {
+      public void run() {
+        jmp_jz_pair_test();
+      }
+    });
+    t.start();
+    t.join(2000);
+    assertTrue(t.isAlive());
+    t.interrupt(); // dont know if this works
+  }
+
+  @Test public void ldr_str_jmp_jz_test()
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R3 10");
+    lines.add("MOV R2 1");
+    lines.add("MOV R1 0");
+    lines.add("MOV R0 100");
+    lines.add("SUB R4 R3 R1");
+    lines.add("JZ  R4 5");
+    lines.add("STR R0 0  R1");
+    lines.add("ADD R1 R1 R2");
+    lines.add("ADD R0 R0 R2");
+    lines.add("JMP -5");
+    lines.add("MOV R1 0");
+    lines.add("MOV R0 100");
+    lines.add("MOV R5 0");
+    lines.add("SUB R4 R3 R1");
+    lines.add("JZ  R4 6");
+    lines.add("LDR R4 R0 0");
+    lines.add("ADD R5 R5 R4");
+    lines.add("ADD R0 R0 R2");
+    lines.add("ADD R1 R1 R2");
+    lines.add("JMP -6");
+    lines.add("RET R5");
+    Machine m = new Machine();
+    assertEquals(m.execute(lines), 45);
+  }
+
+
+  @Test(expected = NoReturnValueException.class)
+  public void no_retrun_test()
+          throws Throwable
+  {
+    final List<String> lines = new ArrayList<String>();;
+    lines.add("MOV R1 10");
+    lines.add("MOV R2 10");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+
   //Any method annotation with "@Test" is executed as a test.
   @Test public void aTest()
   {
@@ -63,13 +351,13 @@ public class PartitioningTests
   //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);
-  }
+//  @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
@@ -87,4 +375,6 @@ public class PartitioningTests
     }
     return lines;
   }
+
+
 }
-- 
GitLab