From 3b6716b84b3cd286cc1aef0fbbe768345bf430a5 Mon Sep 17 00:00:00 2001
From: Callum Vidler <callum.vidler@hotmail.com>
Date: Sun, 2 Sep 2018 20:17:37 +1000
Subject: [PATCH] Final

---
 TEST-swen90006.machine.BoundaryTests.txt      |  35 ++-
 TEST-swen90006.machine.PartitioningTests.txt  |  20 +-
 build.xml                                     |   4 +-
 classes/swen90006/machine/BoundaryTests.class | Bin 2225 -> 3416 bytes
 classes/swen90006/machine/Machine.class       | Bin 4003 -> 4302 bytes
 .../swen90006/machine/PartitioningTests.class | Bin 2066 -> 3209 bytes
 examples/NoReturn.s                           |   2 +
 examples/RiHigh.s                             |   4 +
 examples/RiNeg.s                              |   4 +
 examples/RiValueHigh.s                        |  13 +
 examples/Valid.s                              | 103 ++++++++
 examples/div.s                                |   5 +
 examples/jmpFirst.s                           |   7 +
 examples/jmpLast.s                            |   8 +
 examples/jmpNeg.s                             |   7 +
 examples/jmpPast.s                            |   8 +
 examples/jzLast.s                             |   7 +
 examples/jzNeg.s                              |   5 +
 examples/jzPast.s                             |   7 +
 examples/jzfirst.s                            |   5 +
 examples/partitionTests/RiHigh.s              |   9 +
 examples/partitionTests/RiMaxValue.s          |  13 +
 examples/partitionTests/RiNeg.s               |  10 +
 examples/partitionTests/jmpHigh.s             |  35 +++
 examples/partitionTests/jmpNeg.s              |  35 +++
 examples/partitionTests/jzHigh.s              |  35 +++
 examples/partitionTests/jzNeg.s               |  35 +++
 examples/partitionTests/noReturn.s            |   2 +
 examples/partitionTests/strMaxMem.s           |  45 ++++
 examples/partitionTests/strMemNeg.s           |  42 ++++
 examples/partitionTests/validfile.s           |  35 +++
 examples/partitionTests/valueHigh.s           |   9 +
 examples/partitionTests/valueLow.s            |  12 +
 examples/strHigh.s                            |   6 +
 examples/strMax.s                             |   7 +
 examples/strNeg.s                             |   6 +
 examples/strZero.s                            |   6 +
 examples/valueHigh.s                          |   2 +
 examples/valueLow.s                           |   2 +
 .../mutant-1/swen90006/machine/Machine.java   |  32 +--
 .../mutant-2/swen90006/machine/Machine.java   |  32 +--
 .../mutant-3/swen90006/machine/Machine.java   |  32 +--
 .../mutant-4/swen90006/machine/Machine.java   |  32 +--
 .../mutant-5/swen90006/machine/Machine.java   |  32 +--
 src/swen90006/machine/Machine.java            | 224 +++++++++---------
 test/swen90006/machine/BoundaryTests.java     | 188 ++++++++++++---
 test/swen90006/machine/PartitioningTests.java | 184 +++++++++++---
 47 files changed, 1073 insertions(+), 273 deletions(-)
 create mode 100644 examples/NoReturn.s
 create mode 100644 examples/RiHigh.s
 create mode 100644 examples/RiNeg.s
 create mode 100644 examples/RiValueHigh.s
 create mode 100644 examples/Valid.s
 create mode 100644 examples/div.s
 create mode 100644 examples/jmpFirst.s
 create mode 100644 examples/jmpLast.s
 create mode 100644 examples/jmpNeg.s
 create mode 100644 examples/jmpPast.s
 create mode 100644 examples/jzLast.s
 create mode 100644 examples/jzNeg.s
 create mode 100644 examples/jzPast.s
 create mode 100644 examples/jzfirst.s
 create mode 100644 examples/partitionTests/RiHigh.s
 create mode 100644 examples/partitionTests/RiMaxValue.s
 create mode 100644 examples/partitionTests/RiNeg.s
 create mode 100644 examples/partitionTests/jmpHigh.s
 create mode 100644 examples/partitionTests/jmpNeg.s
 create mode 100644 examples/partitionTests/jzHigh.s
 create mode 100644 examples/partitionTests/jzNeg.s
 create mode 100644 examples/partitionTests/noReturn.s
 create mode 100644 examples/partitionTests/strMaxMem.s
 create mode 100644 examples/partitionTests/strMemNeg.s
 create mode 100644 examples/partitionTests/validfile.s
 create mode 100644 examples/partitionTests/valueHigh.s
 create mode 100644 examples/partitionTests/valueLow.s
 create mode 100644 examples/strHigh.s
 create mode 100644 examples/strMax.s
 create mode 100644 examples/strNeg.s
 create mode 100644 examples/strZero.s
 create mode 100644 examples/valueHigh.s
 create mode 100644 examples/valueLow.s

diff --git a/TEST-swen90006.machine.BoundaryTests.txt b/TEST-swen90006.machine.BoundaryTests.txt
index 8e1f85f..c340653 100644
--- a/TEST-swen90006.machine.BoundaryTests.txt
+++ b/TEST-swen90006.machine.BoundaryTests.txt
@@ -1,16 +1,31 @@
 Testsuite: swen90006.machine.BoundaryTests
-Tests run: 5, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.045 sec
+Tests run: 18, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.35 sec
 
-Testcase: anotherTest took 0.002 sec
-Testcase: aFileOpenTest took 0.015 sec
-Testcase: aFailedTest took 0.002 sec
-	FAILED
-Some failure message expected:<2> but was:<3>
-junit.framework.AssertionFailedError: Some failure message expected:<2> but was:<3>
-	at swen90006.machine.BoundaryTests.aFailedTest(Unknown Source)
+Testcase: JmpNeg took 0.004 sec
+Testcase: JzLast took 0.001 sec
+Testcase: JzPast took 0.001 sec
+Testcase: RiHigh took 0.001 sec
+Testcase: StrNeg took 0.001 sec
+Testcase: valueLow took 0.001 sec
+Testcase: valueHigh took 0.001 sec
+Testcase: StrHigh took 0.001 sec
+Testcase: Div took 0.002 sec
+	Caused an ERROR
+/ by zero
+java.lang.ArithmeticException: / by zero
+	at swen90006.machine.Machine.do_div(Unknown Source)
+	at swen90006.machine.Machine.execute(Unknown Source)
+	at swen90006.machine.BoundaryTests.Div(Unknown Source)
 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 
-Testcase: aTest took 0 sec
-Testcase: anExceptionTest took 0.001 sec
+Testcase: JzNeg took 0.001 sec
+Testcase: RiNeg took 0.001 sec
+Testcase: Valid took 0.004 sec
+Testcase: JmpLast took 0.001 sec
+Testcase: JmpPast took 0.001 sec
+Testcase: JzFirst took 0.001 sec
+Testcase: NoReturn took 0.002 sec
+Testcase: RiValueHigh took 0.002 sec
+Testcase: JmpFirst took 0.289 sec
diff --git a/TEST-swen90006.machine.PartitioningTests.txt b/TEST-swen90006.machine.PartitioningTests.txt
index 3f90591..a63c54d 100644
--- a/TEST-swen90006.machine.PartitioningTests.txt
+++ b/TEST-swen90006.machine.PartitioningTests.txt
@@ -1,7 +1,17 @@
 Testsuite: swen90006.machine.PartitioningTests
-Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.039 sec
+Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.068 sec
 
-Testcase: anotherTest took 0.001 sec
-Testcase: aFileOpenTest took 0.015 sec
-Testcase: aTest took 0 sec
-Testcase: anExceptionTest took 0 sec
+Testcase: JmpNeg took 0.009 sec
+Testcase: strHigh took 0.006 sec
+Testcase: RiHigh took 0.001 sec
+Testcase: ValueLow took 0.001 sec
+Testcase: jzHigh took 0.005 sec
+Testcase: strNeg took 0.002 sec
+Testcase: Div took 0 sec
+Testcase: RiNeg took 0.001 sec
+Testcase: Valid took 0.004 sec
+Testcase: jzNeg took 0.003 sec
+Testcase: JmpHigh took 0.002 sec
+Testcase: NoReturn took 0 sec
+Testcase: RiMaxValue took 0.001 sec
+Testcase: ValueHigh took 0 sec
diff --git a/build.xml b/build.xml
index 658996f..a297973 100644
--- a/build.xml
+++ b/build.xml
@@ -1,7 +1,7 @@
 <project name="Project" default="classes">
     <target name="classes">
         <mkdir dir="classes" />
-        <javac srcdir="src:test" destdir="classes" 
+        <javac srcdir="src:test" destdir="classes"
             classpath="lib/junit-4.11.jar;lib/hamcrest-core-1.3.jar"
             includeantruntime="false"/>
     </target>
@@ -10,7 +10,7 @@
     </target>
 
     <target name="run" depends="classes">
-        <java classname="swen90006.machine.SimpleDriver" 
+        <java classname="swen90006.machine.SimpleDriver"
 	    classpath="classes/;lib/junit-4.11.jar;lib/hamcrest-core-1.3.jar">
 	</java>
     </target>
diff --git a/classes/swen90006/machine/BoundaryTests.class b/classes/swen90006/machine/BoundaryTests.class
index 75ca15dbf4f906cd2b7beec235fa91a8de079579..9706ee5ecfa7f13e4e52ac056aa099fd5102bc90 100644
GIT binary patch
literal 3416
zcmX^0Z`VEs1_o1xxm*ke3}GA$;am**3=!-Mkz5Qc3}GN5iuM2h|Nk494wQ2-L^H&2
zFvM~&#6iRu7#KJh;yD-+I2aN+7?M~SAb^R3A(?|A1;$O`U`XX)NCRsD8O6bn&cTqu
z!H~(pkj24}&B2hv!H~<rkjKRk#E{R$P{2^g&QQd~P|Q%m#Zbyn#?DaA$xy*i$-z*?
z#Zb*q!^NP<P|L+o!BEG}P|wcLz{tR6lbM%UV#mn9tf3jk$iU*9pOVVRz*?MI5?a8>
zAQ@DeSCW~V8kSj{nUs_2n3tDdl30?NpI6MtAmo!@l&+sunwMFk@06OBUzBRi$iPvO
znpotLU!KRvAc!RIm{yWnWX;IH8kU%onZn2*fFu`^T3iB>3d;0LO=o1_NUbPHO)g1I
zVPw$vDK1aVvotU;Fw@UXOwP#6OV#(xD+3wfnO9s=RGJKOifcu3Y5|C0&B(wVlo^(o
zQ=00LnV!MOz!sDVVQ`dz1by<$85uaiOsKF|Zh>27QE>?)1DjWF0oZyiEOz?k2c?#j
z7UhABMz)UKE4RQW5u_i)3V^bzpk}gqRe_CU^QwX<V)Lqks9_5(DFREe2bUB<+`{aV
zS;ok~0kevcL7*r#F$Kw+#f%Ip8a`QxWr_MZiFxVz!6ikRdFj@g5TVkN%p856OmIl@
z2A3ozXZt1=gd`^Aq_Q(KvNJR>GH?cGrspM=loq8jGFT8{kPXCOWV`IFc^C{Cj2IaN
zQY#X33vyD6^}+F}SIooU&k(@KAc+}YzL0q1VQ6M(VP|ONVQ6D$M>YT)>w3kE3}SFI
zk>U^}A&4Xa3M-J9FkB2Aoj&>HAW;!iQB1{I(D()^Mi`p~j(U)o5Zr()NW@|Yg5nQN
zuqq9dgg}CbV95f-JV*%17H}d!7lWCHP*)628X$ED*Azoi2}qC+?!=VLGLQfwC}3#^
zB+42Z;-+iC!_dLd$<ENl!_dvp!^j|jo_g3BdU+W782Z^6Ch#y!WSGRrAdFA~Pw4Cn
zlX)1XFid4+(17MXh0MHy(h`NV%$!t31&v}*aw{oHOioou%g@QlFE7?)XPCyrFr8rr
z55r7`Sv(B08RjrD$YUlBr~J~ql*FP+P!Uj!;y(YRtkmQZMg|G6d-5{#^^-Fai;7cA
z^qnCzBLg2;3ZC#88Q4=RQj<$dQW+V9q3IhgX|3tW$RL0yuN;euQ;SL%8F&)G4A;Wa
z#GGPA238F(FHkASo|a$amzbN%$e;%`2{{`;vm6#jSu-+7f?WlY1BH&hTV_sbaAk2x
zYHl$j16O)#iA!o)VrfnZBZG_vk~wH<t&u&BCdbIYo}O9~kXVwz$Y71db<vpl7TqF{
zW@}hnqd2vgk%0$P?l|V;_+;j#7Bez9K&^l)18auZ0TM%t7Hs7aa<T&l1tSA<YEcm*
zgDAw9%zXWTqRhOK;F6-$#9X+;P=y&8*b6|4a`G4%M4@g%iIgx#27a&#aOoEUN{);S
z5>S<>W?6&cm?gC$vxJd>MZ;4wj6sn>pTPiJ0gEv(g334sMh0UB1_nU}Mg~R(1_oBG
z?F@_?!3r1|Oc;z9n84D!3=CjtsFW!K0|OfaBZC=O*qo3u3$QXvxH1g}76xVp1_l`|
zA*SsN%s#srSR%JGu=?s~Z)0F<6=7iC!N3V|1I!{TunE?16O<U3z$S=k32|YV5RTBx
z&A`ZD#lXm5lgwbtz{p?+Hvq{A+!zM5iZJltaDqMD1SBW$VVHp12@co{;3vTVM{EWN
zkYIol+yJCN5X3N`RfItZM<6)EO+X3+5eyTs2Z9R&BZDj403;`fVi?dW!XSpj32tx`
zkencaVFGR^xWf%Va)Km=0j(koQaGI80XG532{ITa;C6y1+yEpe$YL0PCltKkCLlRM
z4#Nc8PVj~spa#v8Qd&at7zVU*;s^sDZ2A?5*Y6A0j}!!onEG)i1V6Y5NI{^4VFIoo
zU;?%0poLr-12Y3F0|SGxkn#=&6<<cb9So}4%zGKswlS#d>|oIFTh1V9#j=S(OGtYg
zgN`JKwT(fSWe0<v?gj=%1`Y-Z25AOO21bTJ1_lO62B!ZE(hMx@4EpR0YU~U_><qyS
TjO+}Wq6{Gn3=B*Rp$rTFSbhxl

delta 1237
zcmca1wNbGC)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&s3Oed6K5
z`oxgb;u1y%0iXP$bp5Q-yv!1Pkcc%S19xIxeo01Z5s1skz?<lnnUm^YkeUbK^C#xH
zRwSnulw{^ZMY!PnVs?fMMh1@5ih|VSlGGGN22r1^#Ii*F%zS-Mf4C~J6<ltKnK`K`
zATuY&F!}JNu`@)nGi0(eWU({EO<u#~8LZBr!OoD)!;r&}%g7)MHm9^CGe_UCs3@`0
zCllm&#zc08EFOkDhI~c_#v~qw0)~7ZhC+rSMh1b@ip1Q4oYZ3dM38d5Vjc!d2CK;e
z%yPcP3?(r0P~FAIAQGIPo2rnOn3+>rl&X-MT3no%o(gh7DI)`GXo#Dx1v^6~4?`J4
zIXgoI4?`tG)#UXoqB_+)3^fe3><o204D}2RFvD{a^V0R<o@Qrg<Y8!HXrBCmMOUDO
zhoP0BjfbI~p@WB^lc8&}E~~jX#EW2EAsI#a<%vl-sf-K~lmD<uOs-`Wp1gro%bGbc
z1r(|pkYEL?^-s!5O)jz4jACTqNY2kINzBYEW@O+>EG|whDhVknO=V<Y(TLIvo7~5$
zBqENiGq|KEGcVnG^A*;gjKZo6YTyLR$-u~<&Y;1-$e=m-0lP%K7J~)@6N4rL0|PGu
z0|O%nZv-pUW?*1oV_;;^0SPha5>loIR;CYECdR<Rz|6qFz$L=KB*MV7gMkIrSOc(n
z!+N*|BL*f0CI$uuwcQM?k=q&Ae6)qwcQSA=F@$Rial#nvI~ll`7<MplV>8SMZk7hr
zav3clp6v|0KD!zCBDXW}`|4<KV-RQ+VGx8nryk}_h<l6~G#Hq{p&`P+1P%?3-3-E!
z+Zjamg9F8cfq{XAfsw(K0i=(cfsw(0fsw&1nZcZak--9PzXSs-*z-I>qG0cf?O>3=
zbTJcyB}1hZH1yLLm>EF%-&ja;2ZNL^qu&k&X>I1c3^LmoWOa5h$oVa2khEgi#GoLg
zxQ#(c62#iZpv<y^K}B~110w?mg9L*#gFFKxgEa#KgCqmfe+Fp=7Ip?3b_QE^20L~J
Vdj>{!1_x0FM+OE4CI%-41^~8I<Np8v

diff --git a/classes/swen90006/machine/Machine.class b/classes/swen90006/machine/Machine.class
index bc67cdff3d66160515599de443f4aea563326bac..7016ffa225790cdf3bdffe9762ca3de4168e1569 100644
GIT binary patch
literal 4302
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
Hj102@)J?1c

literal 4003
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
X7NLR+jNp2YRci|a(;86a#=rmosEtlI

diff --git a/classes/swen90006/machine/PartitioningTests.class b/classes/swen90006/machine/PartitioningTests.class
index f18ec47fe14f0f146b38fe5def6490170faa1be1..4310f50cb96220db21977273bfad9ca25cd6b386 100644
GIT binary patch
literal 3209
zcmX^0Z`VEs1_o1xUM>a=1}_c<Z!QLP1|N0?UoHj~1}_ld$I1W!x40Pm83H&M0y!9h
zI2eLC7(zH0LRtU+|Np;%fq{X8A&i3|oP!~PgCUZGA&P?`nu8&RgCQ2CJB5QGj*G#K
zA)bpNfgzEdA&HA2nIVOXA(bJGogtl*A%h{4gCUEHA)6tGi$Regmy02TA&;FQpPiwA
zk%7%7GcU8mj*)>`Lo<w#fyFsLC6$qZwK%mTw1AO8GN?4KBr`WPEVDQ>DJRu2FE76&
zu_QA;ub7cR$S1!jT|cWdFSA77DK#y>DAk&gfukffvB)LAJdcq<5J}!Ktt7R`nvsDu
zEHNiDg^@u3NiHO{xCA5>l<Ak6&d9)#T2YXiT#}l?$e{02T%MX|X<%Srrk|UboROKA
zs_&Us1~S4kuehYBG#TU+*NWuS0uaNRk%28J(<3uIgOPzVEHS4v6~g8KvwiZ*85y{O
zGJO*(z<fpqHm}?Qu$5X^?D5MFN-ZfZ$^)xKwu0R&w*X=;YgQFlJ6l#2M1Z}xqzJ-d
zD=sMl%W=TWVPs%-$t+`J5GYDbOhIyeF(ZSDhEG;vS)zVUVqUs_a7j^SUb?j=M5weR
zGe_Si6C6Oi!6k{w*}jPdA&E&jsq74e><mSW44lE4>3NAIrA4WX3>HKfWCJl6*)BV4
z9tKSYEk*|A)QZI1f}GT1{er}zl1xyTf+D9_9~|UqnK`L?#XJno3@(fel9(~$3yC2f
zhGK>ic7{?OhBAh7Mh1CYW`d(zub7cR0k;ZJV1kt3a~LF+L8_E+8B_*J3qJYfAVn&;
z6d_UuNEuE?Wr5QSNQojYld>QQ1f&M1@4-n2qyo1^;6w#dg46fKB}Kl86~3vt1XZQx
z`lY6WRN)MxJZO3cDdL0sEG4rHB)}RP;-+iC!%)Fc$<9#4!%)po!^j|jo@m(_YIzvy
z80y&>8h98Q8JZXwgb_;MS%{sXnTMf;p_P$A1Dcl=GV=;bOB6uqOHo0i7?jFOiV~Ak
z71Hu^a`MZIHQ5>3co^ClI(Qg58M=5Fx*2*H8I&;-U;r%9X6B`X(=Cb{{gbj%lS>#G
zB*1RU%gonL&PXgOPA$=QhR}=*d|)Yfo?~QSPpwEzE-guAWDtgCEx4q$rY9qV0HOqR
zEG|whDq&>cNdz-o3riDoiWwPLHN3n)<tlqxevw~dZYm>#9@He{90<+rSR7@|$RG)J
z6-W*gLi%o*IjO;w#U-h^#f%JG>8T|yscDI&IVFq?G8#zcpsBS+_BfgxBLjPSYDqw1
zNd_Z>H5S)JV-^|c7J)Qd!{Qsosl|*8JfI@aF(=0-GcUE6k--6K1zZ_eGsF&%7+SPo
zD+-a59yll%8JJUxiWnJ0A;x6p>jxBN=9L7O6s0ES!X1Vx%*eoA08*5b$H*WGbrVXY
zgfTMkgH?bF-VjidWMq(lszf!*8WhJYsTG+ej0`Lqo|<6{iVW%u8sOSph=CDQyfQE{
zXfrS{2r@7-FfuSOuxf2*VB82+z{sG(pvAxhmgZ$(082xqbQu^J*cccY^uWUUgp?V8
zl^Md7X)v%bFf%YP$Y=>MZD(Ni+0DQbxt)R4S4Vpr16!*I1N#mJPKX;|78!v}Fov6;
z#J~hLK}<`C3&VtPgkEk2Mg}7WMh25)22%z`1~Y61aFbwwIW_}$NHD+xn*qEe7+?uE
z04WstFbrrFVc^FRidJwFkU~)q!vyT1XwAULV1vy7ArcI*#b$so2?p3<GeCp{1MJ}j
zs6o@Bl$MYvh5@adIKt2Yn|?7u`q5IOBis<Ah!Dpx1b0L@!3{u43lbOxw2ClDV)X|T
zsL=$?;b{!a44{^~v5@o*1{q&Qza0#++RS?y<hC)$>+E1q@LSFxX~nXMK}kq?8-t1@
zh_#JDm1PHmn(hV$Mg|TB2?l8fMFvI&R|W<KNd~6>4AKlN><sGc407xYZtM*142<jy
QilPi23=9lR44w=O0Nh&w&j0`b

delta 1101
zcmeB_oFq_x>ff$?3=9mW3^iN~3JjK93|0)*><l(s49pCc91OPH3}y^=91Qj#+5sf#
z$id*m#URh%%+BD##lQp7!NcIn$^Zen><n&P41yr7?pzF}3?5tzo(x{>4BlJ}J`BEG
z41Ns$><j^%41o+m91Ou+3?V`cp<E1-3}IXhfehj73=!-MkrS5|)+dIf7MCzG2>9d|
zrR!&v=4F=XgG8(u8MqVk@=G#Oi$GjP2Hr%s%$!vJg48?+pFc6rwIVsSpd>RND#8Wl
z7qc@&F*0zZRurTrm!zgJGKl(QC6*=XXXfjB`omROGcpJiO_pTxV2NgDh?$(q<QbsI
zpv2A)%fk@I5YNaU4AxUxl9{9LSX7i)>5~a^C}ScILjpr0BLia+4?_||A`e3{Lkc5<
zKx#!|Zb43Jv3?>*tzIz?gAs%A<U34qdZ`R)FvCzCz{tQF8sesF!NZWwkipK7$-|Jv
zkUjZ6i>OWx4?`|P9y>!m4?_V%Axw8pVqUsF-1+PbMLZ0}3?-8lSak(Tc^JwV%6S+n
z7%F)fsu-##$Ff?BLp%W16_QbuU!Ithlgh{-G1-7!V)8~-;mJ=}wXB&FQ$XRP0SO?m
zTK}Z1)Z`LtO;8Xf=jW9qX66+$GH@jp7pE4LgcOygGBU7eL}`XiKE$fDnUC!=W4%0s
z0yt4{FfcMGGAJ=HGAJ`JFbFa*GB7eQFtBQEXJFh2R=~)h!l1;!1eWGyU;s-)rBoRh
z7}yvX8PveS>V%YOfR$;2mDPi66JlUtU<R4N#kGTh31S`0Of9ftZLngHS|bJ~1||ju
z2DRM`%#qs}SbVgFSa&k8F)@T|3$eo(tUDPvm>702aAGq{2X2-I14}*FVi_$VuI&um
zKD!xsBDXW}`s!$JW8iBQVc^H%99;$_24-+bh%hjLLxN*BgJ9%#2BH1nu+n2-U|?Zj
zWYA{-d4rpQkwJ@rk-;FD!H|Iol(wM3n8v`I#{kNd#zMk77({#-{dO>jYBTR;5ZlHe
zuCs$d!f!c)q!r611}P!wZ45G!Al5bpS(Y6Pa=IHB7#TPiBp9R_BpDbPOc)p#BpI0g
lGe|SAurtWBGl;P>n6fjNF)*?-NQyF;GcYhPF<3A#005|c!S4V7

diff --git a/examples/NoReturn.s b/examples/NoReturn.s
new file mode 100644
index 0000000..754bb15
--- /dev/null
+++ b/examples/NoReturn.s
@@ -0,0 +1,2 @@
+MOV R0 1
+ADD R0 R0 R0
diff --git a/examples/RiHigh.s b/examples/RiHigh.s
new file mode 100644
index 0000000..ab167c7
--- /dev/null
+++ b/examples/RiHigh.s
@@ -0,0 +1,4 @@
+MOV R0 0
+MOV R1 1
+ADD R32 R0 R1 ; Exception
+RET 32
diff --git a/examples/RiNeg.s b/examples/RiNeg.s
new file mode 100644
index 0000000..8b21e65
--- /dev/null
+++ b/examples/RiNeg.s
@@ -0,0 +1,4 @@
+MOV R0 0
+MOV R1 1
+MUL R-1 R0 R1
+RET R1
diff --git a/examples/RiValueHigh.s b/examples/RiValueHigh.s
new file mode 100644
index 0000000..6ac9bb2
--- /dev/null
+++ b/examples/RiValueHigh.s
@@ -0,0 +1,13 @@
+
+MOV R1 46340;
+MOV R2 296;
+MOV R3 432
+
+MUL R6 r1 r1
+MUL R2 r2 r2
+ADD R2 R2 R3
+
+;Ri > 32-bit signed
+Add r8 r6 r2
+
+RET R8;
diff --git a/examples/Valid.s b/examples/Valid.s
new file mode 100644
index 0000000..d89e8a6
--- /dev/null
+++ b/examples/Valid.s
@@ -0,0 +1,103 @@
+
+MOV R0 46340;
+MOV R31 296;
+MOV R3 431
+
+MUL R6 R0 R0
+MUL R31 R31 R31
+ADD R31 R31 R3
+
+;Ri > 32-bit signed
+Add R8 R6 R31 ;  -----------------------EC3
+
+
+;Checking simple math
+
+
+MOV R1 65535;  -----------------------EC6
+MOV R2 100
+MOV R3 -65535;  -----------------------EC6
+MOV R6 12345
+ADD R4 R2 R3; R4 = 100 + -65535
+ADD R5 R3 R6; R4 = -65535 + 12345
+
+ADD R5 R5 R4 ; R5 = -118625
+ADD R8 R5 R8 ;2147483647
+
+
+MOV R1 -1000
+MOV R2 123
+MOV R3 312
+SUB R5 R2 R1; R5 = 123 - -1000
+SUB R5 R5 R3; R5 = - ... - 312
+
+ADD R8 R8 R5; 2147365833
+
+
+MOV R0 -2
+MOV R1 3
+MOV R4 212
+MUL R5 R1 R0 ; 3 * -2
+MUL R5 R5 R4; -6 * 212
+
+ADD R8 R5 R8 ; 2147364561
+
+MOV R0 -12
+MOV R1 200
+MOV R2 4
+DIV R5 R1 R0 ;200/-12 = -16
+DIV R5 R5 R2 ; -16/
+
+ADD R8 R8 R5; 2147364557
+
+
+
+;;testing STR and LDR
+MOV R10 2018;
+MOV R0 0
+STR R0 0 R10;  -----------------------EC15
+LDR R1 R0 0;  R1 = 2018
+
+ADD R8 R8 R1; 2147366575
+;;testing STR and LDR
+MOV R10 -63123;
+MOV R0 65533;
+MOV R2 65532
+STR R0 2 R10; memory[65535]  -----------------------EC15
+LDR R1 R2 3;  R1 = -63123
+
+ADD R8 R8 R1; 2147303452
+
+
+;;testing STR and LDR with negative inputs
+MOV R10 10;
+MOV R0 -2;
+MOV R2 -4
+STR R0 5 R10; memory[65535]
+LDR R1 R2 7;  R1 = 10
+ADD R8 R8 R1; 2147303462
+
+;;testing STR and LDR with negative inputs
+MOV R10 55;
+MOV R0 7;
+MOV R2 5
+STR R0 -4 R10; memory[65535]
+LDR R1 R2 -2;  R1 = 55
+ADD R8 R8 R1; 2147303517
+
+;;testing STR and LDR
+MOV R10 -212
+MOV R1 20
+MOV R0 65535;
+ADD R0 R0 R1
+STR R0 -20 R10; memory[65535]
+LDR R1 R0 -20;  R1 = -212
+ADD R8 R8 R1;
+
+
+MOV R0 -1
+MOV R1 1
+DIV R8 R8 R0 ; -2147303305
+DIV R8 R8 R1
+
+RET R8;
diff --git a/examples/div.s b/examples/div.s
new file mode 100644
index 0000000..c803095
--- /dev/null
+++ b/examples/div.s
@@ -0,0 +1,5 @@
+MOV R0 0
+MOV R1 10
+MOV R2 100
+DIV R2 R1 R0
+RET R2
diff --git a/examples/jmpFirst.s b/examples/jmpFirst.s
new file mode 100644
index 0000000..c47097c
--- /dev/null
+++ b/examples/jmpFirst.s
@@ -0,0 +1,7 @@
+MOV R6 10000; looping 10,000 times, sometimes causes random error
+MOV R5 1;
+ADD R0 R5 R5
+SUB R6 R6 R5      ;
+JZ  R6 2              ;{
+JMP -4
+RET R0                  ; return R0 = 2;
diff --git a/examples/jmpLast.s b/examples/jmpLast.s
new file mode 100644
index 0000000..b774cbd
--- /dev/null
+++ b/examples/jmpLast.s
@@ -0,0 +1,8 @@
+MOV R6 2;
+MOV R5 1;
+MOV R0 100
+SUB R6 R6 R5      ;
+JZ  R6 2              ;{
+JMP 2
+ADD R0 R0 R5
+RET R0                  ; return R6 = 100;
diff --git a/examples/jmpNeg.s b/examples/jmpNeg.s
new file mode 100644
index 0000000..8ef9421
--- /dev/null
+++ b/examples/jmpNeg.s
@@ -0,0 +1,7 @@
+MOV R6 2;
+MOV R5 1;
+ADD R0 R5 R5
+SUB R6 R6 R5      ;
+JZ  R6 2              ;{
+JMP -6
+RET R0                  ; return R6 = -1;
diff --git a/examples/jmpPast.s b/examples/jmpPast.s
new file mode 100644
index 0000000..b8a151f
--- /dev/null
+++ b/examples/jmpPast.s
@@ -0,0 +1,8 @@
+MOV R6 2;
+MOV R5 1;
+MOV R0 100
+SUB R6 R6 R5      ;
+JZ  R6 2              ;{
+JMP 3
+ADD R0 R0 R5
+RET R0                  ; return R6 = 100;
diff --git a/examples/jzLast.s b/examples/jzLast.s
new file mode 100644
index 0000000..ede5628
--- /dev/null
+++ b/examples/jzLast.s
@@ -0,0 +1,7 @@
+MOV R6 1;
+MOV R5 1;
+MOV R0 100
+SUB R6 R6 R5      ;
+JZ  R6 2              ;{
+ADD R0 R0 R5
+RET R0                  ; return R6 = -1;
diff --git a/examples/jzNeg.s b/examples/jzNeg.s
new file mode 100644
index 0000000..c47c9fb
--- /dev/null
+++ b/examples/jzNeg.s
@@ -0,0 +1,5 @@
+MOV R6 1;
+MOV R5 1;
+SUB R6 R6 R5      ;
+JZ  R6 -4              ;{
+RET R6                  ; return R6 = -1;
diff --git a/examples/jzPast.s b/examples/jzPast.s
new file mode 100644
index 0000000..a083e34
--- /dev/null
+++ b/examples/jzPast.s
@@ -0,0 +1,7 @@
+MOV R6 1;
+MOV R5 1;
+MOV R0 100
+SUB R6 R6 R5      ;
+JZ  R6 3              ;{
+ADD R0 R0 R5
+RET R0                  ; return R6 = -1;
diff --git a/examples/jzfirst.s b/examples/jzfirst.s
new file mode 100644
index 0000000..7c3bb8c
--- /dev/null
+++ b/examples/jzfirst.s
@@ -0,0 +1,5 @@
+MOV R6 1;
+MOV R5 1;
+SUB R6 R6 R5      ;
+JZ  R6 -2              ;{
+RET R6                  ; return R6 = -1;
diff --git a/examples/partitionTests/RiHigh.s b/examples/partitionTests/RiHigh.s
new file mode 100644
index 0000000..1e95388
--- /dev/null
+++ b/examples/partitionTests/RiHigh.s
@@ -0,0 +1,9 @@
+
+MOV R1 0;
+MOV R2 1000
+MOV R3 -65535;
+
+;;Ri where i > 31 
+ADD R32 R1 R3;
+
+RET R32;
diff --git a/examples/partitionTests/RiMaxValue.s b/examples/partitionTests/RiMaxValue.s
new file mode 100644
index 0000000..6ac9bb2
--- /dev/null
+++ b/examples/partitionTests/RiMaxValue.s
@@ -0,0 +1,13 @@
+
+MOV R1 46340;
+MOV R2 296;
+MOV R3 432
+
+MUL R6 r1 r1
+MUL R2 r2 r2
+ADD R2 R2 R3
+
+;Ri > 32-bit signed
+Add r8 r6 r2
+
+RET R8;
diff --git a/examples/partitionTests/RiNeg.s b/examples/partitionTests/RiNeg.s
new file mode 100644
index 0000000..957fed6
--- /dev/null
+++ b/examples/partitionTests/RiNeg.s
@@ -0,0 +1,10 @@
+
+MOV R1 0;
+MOV R2 1000
+MOV R3 -65535;
+
+;Ri where i < 0 == -1
+ADD R-1 R1 R3;
+
+
+RET R-1;
diff --git a/examples/partitionTests/jmpHigh.s b/examples/partitionTests/jmpHigh.s
new file mode 100644
index 0000000..e720d61
--- /dev/null
+++ b/examples/partitionTests/jmpHigh.s
@@ -0,0 +1,35 @@
+;;testing simple
+MOV R1 65535;
+MOV R2 100
+MOV R3 -65535;
+ADD R4 R2 R3;
+SUB R5 R4 R1;
+MUL R6 R4 R5
+DIV R7 R6 R5;  R7 = 152
+
+
+
+
+;;testing STR and LDR
+MOV R10 50;
+MOV R11 20
+STR R10 1 R11;
+MOV R13 21
+LDR R12 R13 30;  R12 = 20
+
+ADD R13 R12 R7; R13 = 172
+
+
+;;testing loop jz and jmp
+MOV R14 10;
+MOV R15 1;
+MOV R18 1;
+MOV R17 1;
+SUB R16 R14 R15
+JZ  R16 4
+ADD R17 R17 R16
+ADD R15 R15 R18
+JMP 4                  ;R17 = 46
+
+ADD R19 R13 R17         ; 172 + 46
+RET R19                  ; return sum;
diff --git a/examples/partitionTests/jmpNeg.s b/examples/partitionTests/jmpNeg.s
new file mode 100644
index 0000000..92a65cb
--- /dev/null
+++ b/examples/partitionTests/jmpNeg.s
@@ -0,0 +1,35 @@
+;;testing simple
+MOV R1 65535;
+MOV R2 100
+MOV R3 -65535;
+ADD R4 R2 R3;
+SUB R5 R4 R1;
+MUL R6 R4 R5
+DIV R7 R6 R5;  R7 = 152
+
+
+
+
+;;testing STR and LDR
+MOV R10 50;
+MOV R11 20
+STR R10 1 R11;
+MOV R13 21
+LDR R12 R13 30;  R12 = 20
+
+ADD R13 R12 R7; R13 = 172
+
+
+;;testing loop jz and jmp
+MOV R14 10;
+MOV R15 1;
+MOV R18 1;
+MOV R17 1;
+SUB R16 R14 R15
+JZ  R16 4
+ADD R17 R17 R16
+ADD R15 R15 R18
+JMP -32                  ;R17 = 46
+
+ADD R19 R13 R17         ; 172 + 46
+RET R19                  ; return sum;
diff --git a/examples/partitionTests/jzHigh.s b/examples/partitionTests/jzHigh.s
new file mode 100644
index 0000000..93e38ad
--- /dev/null
+++ b/examples/partitionTests/jzHigh.s
@@ -0,0 +1,35 @@
+;;testing simple
+MOV R1 65535;
+MOV R2 100
+MOV R3 -65535;
+ADD R4 R2 R3;
+SUB R5 R4 R1;
+MUL R6 R4 R5
+DIV R7 R6 R5;  R7 = 152
+
+
+
+
+;;testing STR and LDR
+MOV R10 50;
+MOV R11 20
+STR R10 1 R11;
+MOV R13 21
+LDR R12 R13 30;  R12 = 20
+
+ADD R13 R12 R7; R13 = 172
+
+
+;;testing loop jz and jmp
+MOV R14 10;
+MOV R15 1;
+MOV R18 1;
+MOV R17 1;
+SUB R16 R14 R15
+JZ  R16 7
+ADD R17 R17 R16
+ADD R15 R15 R18
+JMP -4                  ;R17 = 46
+
+ADD R19 R13 R17         ; 172 + 46
+RET R19                  ; return sum;
diff --git a/examples/partitionTests/jzNeg.s b/examples/partitionTests/jzNeg.s
new file mode 100644
index 0000000..a3312a8
--- /dev/null
+++ b/examples/partitionTests/jzNeg.s
@@ -0,0 +1,35 @@
+;;testing simple
+MOV R1 65535;
+MOV R2 100
+MOV R3 -65535;
+ADD R4 R2 R3;
+SUB R5 R4 R1;
+MUL R6 R4 R5
+DIV R7 R6 R5;  R7 = 152
+
+
+
+
+;;testing STR and LDR
+MOV R10 50;
+MOV R11 20
+STR R10 1 R11;
+MOV R13 21
+LDR R12 R13 30;  R12 = 20
+
+ADD R13 R12 R7; R13 = 172
+
+
+;;testing loop jz and jmp
+MOV R14 10;
+MOV R15 1;
+MOV R18 1;
+MOV R17 1;
+SUB R16 R14 R15
+JZ  R16 -29
+ADD R17 R17 R16
+ADD R15 R15 R18
+JMP -4                  ;R17 = 46
+
+ADD R19 R13 R17         ; 172 + 46
+RET R19                  ; return sum;
diff --git a/examples/partitionTests/noReturn.s b/examples/partitionTests/noReturn.s
new file mode 100644
index 0000000..754bb15
--- /dev/null
+++ b/examples/partitionTests/noReturn.s
@@ -0,0 +1,2 @@
+MOV R0 1
+ADD R0 R0 R0
diff --git a/examples/partitionTests/strMaxMem.s b/examples/partitionTests/strMaxMem.s
new file mode 100644
index 0000000..cd0a031
--- /dev/null
+++ b/examples/partitionTests/strMaxMem.s
@@ -0,0 +1,45 @@
+;;testing simple
+MOV R1 65535;
+MOV R2 100
+MOV R3 -65535;
+;ADD R4 R2 R3; R4 = 100 + -65535
+;ADD R4 R4 R1; R4 = -65435 + 65535
+;SUB R5 R4 R1; R5 = 100 - 65535
+;SUB R5 R5 R3; R5 = -65435 - - 65535
+
+;;testing simple
+MOV R1 65535;
+MOV R2 100
+MOV R3 -65535;
+ADD R4 R2 R3;
+SUB R5 R4 R1;
+MUL R6 R4 R5
+DIV R7 R6 R5;  R7 = 152
+
+
+
+
+;;testing STR and LDR
+MOV R10 1;
+ADD R20 R10 R1;
+MOV R11 20
+STR R10 65535 R11;
+MOV R13 21
+LDR R12 R10 65535;  R12 = 20
+
+ADD R13 R12 R7; R13 = 152
+
+
+;;testing loop jz and jmp
+MOV R14 10;
+MOV R15 1;
+MOV R18 1;
+MOV R17 1;
+SUB R16 R14 R15
+JZ  R16 4
+ADD R17 R17 R16
+ADD R15 R15 R18
+JMP -4                  ;R17 = 46
+
+ADD R19 R13 R17         ; 172 + 46
+RET R12                  ; return sum;
diff --git a/examples/partitionTests/strMemNeg.s b/examples/partitionTests/strMemNeg.s
new file mode 100644
index 0000000..ab56ec8
--- /dev/null
+++ b/examples/partitionTests/strMemNeg.s
@@ -0,0 +1,42 @@
+;;testing simple
+MOV R1 65535;
+MOV R2 100
+MOV R3 -65535;
+;ADD R4 R2 R3; R4 = 100 + -65535
+;ADD R4 R4 R1; R4 = -65435 + 65535
+;SUB R5 R4 R1; R5 = 100 - 65535
+;SUB R5 R5 R3; R5 = -65435 - - 65535
+
+;;testing simple
+MOV R1 65535;
+MOV R2 100
+MOV R3 -65535;
+ADD R4 R2 R3;
+SUB R5 R4 R1;
+MUL R6 R4 R5
+DIV R7 R6 R5;  R7 = 152
+
+
+
+
+;;testing STR and LDR
+MOV R10 -1;
+STR R10 0 R10; ;;does nothing as b + v < -1
+LDR R12 0 R10;  R12 = 0
+
+ADD R13 R12 R7; R13 = 152
+
+
+;;testing loop jz and jmp
+MOV R14 10;
+MOV R15 1;
+MOV R18 1;
+MOV R17 1;
+SUB R16 R14 R15
+JZ  R16 4
+ADD R17 R17 R16
+ADD R15 R15 R18
+JMP -4                  ;R17 = 46
+
+ADD R19 R13 R17         ; 172 + 46
+RET R19                  ; return sum;
diff --git a/examples/partitionTests/validfile.s b/examples/partitionTests/validfile.s
new file mode 100644
index 0000000..6195e6a
--- /dev/null
+++ b/examples/partitionTests/validfile.s
@@ -0,0 +1,35 @@
+;;testing simple
+MOV R1 65535;
+MOV R2 100
+MOV R3 -65535;
+ADD R4 R2 R3;
+SUB R5 R4 R1;
+MUL R6 R4 R5
+DIV R7 R6 R5;  R7 = 152
+
+
+
+
+;;testing STR and LDR
+MOV R10 50;
+MOV R11 20
+STR R10 1 R11; momeory[51] = 20
+MOV R13 21
+LDR R12 R13 30;  R12 = 20
+
+ADD R13 R12 R7; R13 = 172
+
+
+;;testing loop jz and jmp
+MOV R14 10;
+MOV R15 1;
+MOV R18 1;
+MOV R17 1;
+SUB R16 R14 R15
+JZ  R16 4
+ADD R17 R17 R16
+ADD R15 R15 R18
+JMP -4                  ;R17 = 46
+
+ADD R19 R13 R17         ; 172 + 46
+RET R19                  ; return sum;
diff --git a/examples/partitionTests/valueHigh.s b/examples/partitionTests/valueHigh.s
new file mode 100644
index 0000000..722fbac
--- /dev/null
+++ b/examples/partitionTests/valueHigh.s
@@ -0,0 +1,9 @@
+;value > 65535
+MOV R1 65536;
+MOV R2 1000
+MOV R3 -65535;
+ADD R4 R2 R3;
+SUB R5 R4 R1;
+MUL R6 R4 R5
+DIV R7 R6 R5
+RET R7;
diff --git a/examples/partitionTests/valueLow.s b/examples/partitionTests/valueLow.s
new file mode 100644
index 0000000..a87c144
--- /dev/null
+++ b/examples/partitionTests/valueLow.s
@@ -0,0 +1,12 @@
+
+MOV R1 65535;
+MOV R2 1000
+
+;Value < 65535
+MOV R3 -65536;
+
+ADD R4 R2 R3;
+SUB R5 R4 R1;
+MUL R6 R4 R5
+DIV R7 R6 R5
+RET R7;
diff --git a/examples/strHigh.s b/examples/strHigh.s
new file mode 100644
index 0000000..2071ecf
--- /dev/null
+++ b/examples/strHigh.s
@@ -0,0 +1,6 @@
+;;testing STR and LDR
+MOV R10 12;
+MOV R0 65535;
+STR R0 1 R10; memory[65536] = 12
+LDR R1 R0 1;  R1 = 12
+RET R1;
diff --git a/examples/strMax.s b/examples/strMax.s
new file mode 100644
index 0000000..7a1029f
--- /dev/null
+++ b/examples/strMax.s
@@ -0,0 +1,7 @@
+;;testing STR and LDR
+MOV R10 12;
+MOV R0 65533;
+MOV R2 65532
+STR R0 2 R10; memory[65535]
+LDR R1 R2 3;  R1 = 12
+RET R1;
diff --git a/examples/strNeg.s b/examples/strNeg.s
new file mode 100644
index 0000000..1ae399f
--- /dev/null
+++ b/examples/strNeg.s
@@ -0,0 +1,6 @@
+;;testing STR and LDR
+MOV R10 12;
+MOV R0 -1
+STR R0 0 R10;
+LDR R1 R0 0;  R1 = 12
+RET R1;
diff --git a/examples/strZero.s b/examples/strZero.s
new file mode 100644
index 0000000..35132bb
--- /dev/null
+++ b/examples/strZero.s
@@ -0,0 +1,6 @@
+;;testing STR and LDR
+MOV R10 12;
+MOV R0 0
+STR R0 0 R10;
+LDR R1 R0 0;  R1 = 12
+RET R1;
diff --git a/examples/valueHigh.s b/examples/valueHigh.s
new file mode 100644
index 0000000..9dd4be1
--- /dev/null
+++ b/examples/valueHigh.s
@@ -0,0 +1,2 @@
+MOV R1 65536 ; Exception
+RET R1
diff --git a/examples/valueLow.s b/examples/valueLow.s
new file mode 100644
index 0000000..293c450
--- /dev/null
+++ b/examples/valueLow.s
@@ -0,0 +1,2 @@
+MOV R1 -65536 ; Exception
+RET R1
diff --git a/mutants/mutant-1/swen90006/machine/Machine.java b/mutants/mutant-1/swen90006/machine/Machine.java
index 9bf5731..6f5be61 100644
--- a/mutants/mutant-1/swen90006/machine/Machine.java
+++ b/mutants/mutant-1/swen90006/machine/Machine.java
@@ -3,7 +3,7 @@ package swen90006.machine;
 import java.util.Arrays;
 import java.util.List;
 
-public class Machine 
+public class Machine
 {
   /** arithmetic instructions each take three registers as arguments with the
    *  destination register appearing first
@@ -12,13 +12,13 @@ public class Machine
   /** add rd rs1 rs2   =~   rd = rs1 + rs2 */
   public static final String INSTRUCTION_ADD = "add";
 
-  /** sub rd rs1 rs2   =~   rd = rs1 - rs2 */    
+  /** sub rd rs1 rs2   =~   rd = rs1 - rs2 */
   public static final String INSTRUCTION_SUBTRACT = "sub";
 
-  /** mul rd rs1 rs2   =~   rd = rs1 * rs2 */        
+  /** mul rd rs1 rs2   =~   rd = rs1 * rs2 */
   public static final String INSTRUCTION_MULT = "mul";
 
-  /** div rd rs1 rs2   =~   rd = rs1 / rs2 */            
+  /** div rd rs1 rs2   =~   rd = rs1 / rs2 */
   public static final String INSTRUCTION_DIVIDE = "div";
 
   /** ret rs           =~   return rs */
@@ -38,17 +38,17 @@ public class Machine
 
   /** jz ra offs       =~   if (ra == 0) pc = pc + offs else pc = pc + 1 */
   public static final String INSTRUCTION_JZ = "jz";
-    
+
   public static final int NUM_REGS = 32;
   public static final int MAX_REG = (NUM_REGS - 1);
   public static final int MEMORY_SIZE = 65536; /* 4 x as much memory as a 64 */
   public static final int MAX_ADDR = MEMORY_SIZE-1;
-    
+
   private int[] memory;
   private int[] regs;
 
   private int count = 0; /* counts number of instructions executed so far */
-    
+
   public Machine()
   {
     memory = new int[MEMORY_SIZE];
@@ -60,17 +60,17 @@ public class Machine
   {
     regs[dest] = regs[src1] + regs[src2];
   }
-    
+
   private void do_sub(int dest, int src1, int src2)
   {
     regs[dest] = regs[src1] - regs[src2];
   }
-    
+
   private void do_mult(int dest, int src1, int src2)
   {
     regs[dest] = regs[src1] * regs[src2];
   }
-    
+
   private void do_div(int dest, int src1, int src2)
   {
     if (regs[src2] == 0){
@@ -86,7 +86,7 @@ public class Machine
     }else if(regs[src] + offs < 0){
       /* no op */
     }else{
-      regs[dest] = memory[regs[src] + offs];
+      regs[dest] = memory[Math.abs(regs[src]) + offs];
     }
   }
 
@@ -152,16 +152,16 @@ public class Machine
       throw new InvalidInstructionException();
     }
   }
-    
+
   /** Execute an assembly program.
    *
-   * @param prog is the program to execute as an iterable collection of strings, 
+   * @param prog is the program to execute as an iterable collection of strings,
    *        each of which is a single instruction.
    * @return the program's return value.
-   * @throws Exception when program has unrecognised or 
+   * @throws Exception when program has unrecognised or
    *         invalid instructions, or when it returns no result when it finishes
    */
-  int execute(List<String> instructions) 
+  int execute(List<String> instructions)
     throws InvalidInstructionException,
 	   NoReturnValueException
   {
@@ -180,7 +180,7 @@ public class Machine
 	break;
       }
       String inst = instructions.get(pc);
-      /* strip leading and trailing whitespace */ 
+      /* strip leading and trailing whitespace */
       inst = inst.toLowerCase().replaceAll("^\\s+","").replaceAll("\\s+$","");
       /* strip out any comments */
       String[] toks = inst.split(";");
diff --git a/mutants/mutant-2/swen90006/machine/Machine.java b/mutants/mutant-2/swen90006/machine/Machine.java
index 9bf5731..68e5773 100644
--- a/mutants/mutant-2/swen90006/machine/Machine.java
+++ b/mutants/mutant-2/swen90006/machine/Machine.java
@@ -3,7 +3,7 @@ package swen90006.machine;
 import java.util.Arrays;
 import java.util.List;
 
-public class Machine 
+public class Machine
 {
   /** arithmetic instructions each take three registers as arguments with the
    *  destination register appearing first
@@ -12,13 +12,13 @@ public class Machine
   /** add rd rs1 rs2   =~   rd = rs1 + rs2 */
   public static final String INSTRUCTION_ADD = "add";
 
-  /** sub rd rs1 rs2   =~   rd = rs1 - rs2 */    
+  /** sub rd rs1 rs2   =~   rd = rs1 - rs2 */
   public static final String INSTRUCTION_SUBTRACT = "sub";
 
-  /** mul rd rs1 rs2   =~   rd = rs1 * rs2 */        
+  /** mul rd rs1 rs2   =~   rd = rs1 * rs2 */
   public static final String INSTRUCTION_MULT = "mul";
 
-  /** div rd rs1 rs2   =~   rd = rs1 / rs2 */            
+  /** div rd rs1 rs2   =~   rd = rs1 / rs2 */
   public static final String INSTRUCTION_DIVIDE = "div";
 
   /** ret rs           =~   return rs */
@@ -38,17 +38,17 @@ public class Machine
 
   /** jz ra offs       =~   if (ra == 0) pc = pc + offs else pc = pc + 1 */
   public static final String INSTRUCTION_JZ = "jz";
-    
+
   public static final int NUM_REGS = 32;
   public static final int MAX_REG = (NUM_REGS - 1);
   public static final int MEMORY_SIZE = 65536; /* 4 x as much memory as a 64 */
   public static final int MAX_ADDR = MEMORY_SIZE-1;
-    
+
   private int[] memory;
   private int[] regs;
 
   private int count = 0; /* counts number of instructions executed so far */
-    
+
   public Machine()
   {
     memory = new int[MEMORY_SIZE];
@@ -60,17 +60,17 @@ public class Machine
   {
     regs[dest] = regs[src1] + regs[src2];
   }
-    
+
   private void do_sub(int dest, int src1, int src2)
   {
     regs[dest] = regs[src1] - regs[src2];
   }
-    
+
   private void do_mult(int dest, int src1, int src2)
   {
     regs[dest] = regs[src1] * regs[src2];
   }
-    
+
   private void do_div(int dest, int src1, int src2)
   {
     if (regs[src2] == 0){
@@ -81,7 +81,7 @@ public class Machine
   }
 
   private void do_load(int dest, int src, int offs) {
-    if (regs[src] + offs > MAX_ADDR){
+    if (regs[src] + Math.abs(offs) > MAX_ADDR){
       /* no op */
     }else if(regs[src] + offs < 0){
       /* no op */
@@ -152,16 +152,16 @@ public class Machine
       throw new InvalidInstructionException();
     }
   }
-    
+
   /** Execute an assembly program.
    *
-   * @param prog is the program to execute as an iterable collection of strings, 
+   * @param prog is the program to execute as an iterable collection of strings,
    *        each of which is a single instruction.
    * @return the program's return value.
-   * @throws Exception when program has unrecognised or 
+   * @throws Exception when program has unrecognised or
    *         invalid instructions, or when it returns no result when it finishes
    */
-  int execute(List<String> instructions) 
+  int execute(List<String> instructions)
     throws InvalidInstructionException,
 	   NoReturnValueException
   {
@@ -180,7 +180,7 @@ public class Machine
 	break;
       }
       String inst = instructions.get(pc);
-      /* strip leading and trailing whitespace */ 
+      /* strip leading and trailing whitespace */
       inst = inst.toLowerCase().replaceAll("^\\s+","").replaceAll("\\s+$","");
       /* strip out any comments */
       String[] toks = inst.split(";");
diff --git a/mutants/mutant-3/swen90006/machine/Machine.java b/mutants/mutant-3/swen90006/machine/Machine.java
index 9bf5731..9c4a583 100644
--- a/mutants/mutant-3/swen90006/machine/Machine.java
+++ b/mutants/mutant-3/swen90006/machine/Machine.java
@@ -3,7 +3,7 @@ package swen90006.machine;
 import java.util.Arrays;
 import java.util.List;
 
-public class Machine 
+public class Machine
 {
   /** arithmetic instructions each take three registers as arguments with the
    *  destination register appearing first
@@ -12,13 +12,13 @@ public class Machine
   /** add rd rs1 rs2   =~   rd = rs1 + rs2 */
   public static final String INSTRUCTION_ADD = "add";
 
-  /** sub rd rs1 rs2   =~   rd = rs1 - rs2 */    
+  /** sub rd rs1 rs2   =~   rd = rs1 - rs2 */
   public static final String INSTRUCTION_SUBTRACT = "sub";
 
-  /** mul rd rs1 rs2   =~   rd = rs1 * rs2 */        
+  /** mul rd rs1 rs2   =~   rd = rs1 * rs2 */
   public static final String INSTRUCTION_MULT = "mul";
 
-  /** div rd rs1 rs2   =~   rd = rs1 / rs2 */            
+  /** div rd rs1 rs2   =~   rd = rs1 / rs2 */
   public static final String INSTRUCTION_DIVIDE = "div";
 
   /** ret rs           =~   return rs */
@@ -38,17 +38,17 @@ public class Machine
 
   /** jz ra offs       =~   if (ra == 0) pc = pc + offs else pc = pc + 1 */
   public static final String INSTRUCTION_JZ = "jz";
-    
+
   public static final int NUM_REGS = 32;
   public static final int MAX_REG = (NUM_REGS - 1);
   public static final int MEMORY_SIZE = 65536; /* 4 x as much memory as a 64 */
   public static final int MAX_ADDR = MEMORY_SIZE-1;
-    
+
   private int[] memory;
   private int[] regs;
 
   private int count = 0; /* counts number of instructions executed so far */
-    
+
   public Machine()
   {
     memory = new int[MEMORY_SIZE];
@@ -60,17 +60,17 @@ public class Machine
   {
     regs[dest] = regs[src1] + regs[src2];
   }
-    
+
   private void do_sub(int dest, int src1, int src2)
   {
     regs[dest] = regs[src1] - regs[src2];
   }
-    
+
   private void do_mult(int dest, int src1, int src2)
   {
     regs[dest] = regs[src1] * regs[src2];
   }
-    
+
   private void do_div(int dest, int src1, int src2)
   {
     if (regs[src2] == 0){
@@ -91,7 +91,7 @@ public class Machine
   }
 
   private void do_store(int a, int offs, int b)  {
-    if (regs[a] + offs > MAX_ADDR){
+    if (regs[a] + Math.abs(offs) > MAX_ADDR){
       /* no op */
     }else if(regs[a] + offs < 0){
       /* no op */
@@ -152,16 +152,16 @@ public class Machine
       throw new InvalidInstructionException();
     }
   }
-    
+
   /** Execute an assembly program.
    *
-   * @param prog is the program to execute as an iterable collection of strings, 
+   * @param prog is the program to execute as an iterable collection of strings,
    *        each of which is a single instruction.
    * @return the program's return value.
-   * @throws Exception when program has unrecognised or 
+   * @throws Exception when program has unrecognised or
    *         invalid instructions, or when it returns no result when it finishes
    */
-  int execute(List<String> instructions) 
+  int execute(List<String> instructions)
     throws InvalidInstructionException,
 	   NoReturnValueException
   {
@@ -180,7 +180,7 @@ public class Machine
 	break;
       }
       String inst = instructions.get(pc);
-      /* strip leading and trailing whitespace */ 
+      /* strip leading and trailing whitespace */
       inst = inst.toLowerCase().replaceAll("^\\s+","").replaceAll("\\s+$","");
       /* strip out any comments */
       String[] toks = inst.split(";");
diff --git a/mutants/mutant-4/swen90006/machine/Machine.java b/mutants/mutant-4/swen90006/machine/Machine.java
index 9bf5731..53bdfe9 100644
--- a/mutants/mutant-4/swen90006/machine/Machine.java
+++ b/mutants/mutant-4/swen90006/machine/Machine.java
@@ -3,7 +3,7 @@ package swen90006.machine;
 import java.util.Arrays;
 import java.util.List;
 
-public class Machine 
+public class Machine
 {
   /** arithmetic instructions each take three registers as arguments with the
    *  destination register appearing first
@@ -12,13 +12,13 @@ public class Machine
   /** add rd rs1 rs2   =~   rd = rs1 + rs2 */
   public static final String INSTRUCTION_ADD = "add";
 
-  /** sub rd rs1 rs2   =~   rd = rs1 - rs2 */    
+  /** sub rd rs1 rs2   =~   rd = rs1 - rs2 */
   public static final String INSTRUCTION_SUBTRACT = "sub";
 
-  /** mul rd rs1 rs2   =~   rd = rs1 * rs2 */        
+  /** mul rd rs1 rs2   =~   rd = rs1 * rs2 */
   public static final String INSTRUCTION_MULT = "mul";
 
-  /** div rd rs1 rs2   =~   rd = rs1 / rs2 */            
+  /** div rd rs1 rs2   =~   rd = rs1 / rs2 */
   public static final String INSTRUCTION_DIVIDE = "div";
 
   /** ret rs           =~   return rs */
@@ -38,17 +38,17 @@ public class Machine
 
   /** jz ra offs       =~   if (ra == 0) pc = pc + offs else pc = pc + 1 */
   public static final String INSTRUCTION_JZ = "jz";
-    
+
   public static final int NUM_REGS = 32;
   public static final int MAX_REG = (NUM_REGS - 1);
   public static final int MEMORY_SIZE = 65536; /* 4 x as much memory as a 64 */
   public static final int MAX_ADDR = MEMORY_SIZE-1;
-    
+
   private int[] memory;
   private int[] regs;
 
   private int count = 0; /* counts number of instructions executed so far */
-    
+
   public Machine()
   {
     memory = new int[MEMORY_SIZE];
@@ -60,17 +60,17 @@ public class Machine
   {
     regs[dest] = regs[src1] + regs[src2];
   }
-    
+
   private void do_sub(int dest, int src1, int src2)
   {
     regs[dest] = regs[src1] - regs[src2];
   }
-    
+
   private void do_mult(int dest, int src1, int src2)
   {
     regs[dest] = regs[src1] * regs[src2];
   }
-    
+
   private void do_div(int dest, int src1, int src2)
   {
     if (regs[src2] == 0){
@@ -96,7 +96,7 @@ public class Machine
     }else if(regs[a] + offs < 0){
       /* no op */
     }else{
-      memory[regs[a] + offs] = regs[b];
+      memory[Math.abs(regs[a]) + offs] = regs[b];
     }
   }
 
@@ -152,16 +152,16 @@ public class Machine
       throw new InvalidInstructionException();
     }
   }
-    
+
   /** Execute an assembly program.
    *
-   * @param prog is the program to execute as an iterable collection of strings, 
+   * @param prog is the program to execute as an iterable collection of strings,
    *        each of which is a single instruction.
    * @return the program's return value.
-   * @throws Exception when program has unrecognised or 
+   * @throws Exception when program has unrecognised or
    *         invalid instructions, or when it returns no result when it finishes
    */
-  int execute(List<String> instructions) 
+  int execute(List<String> instructions)
     throws InvalidInstructionException,
 	   NoReturnValueException
   {
@@ -180,7 +180,7 @@ public class Machine
 	break;
       }
       String inst = instructions.get(pc);
-      /* strip leading and trailing whitespace */ 
+      /* strip leading and trailing whitespace */
       inst = inst.toLowerCase().replaceAll("^\\s+","").replaceAll("\\s+$","");
       /* strip out any comments */
       String[] toks = inst.split(";");
diff --git a/mutants/mutant-5/swen90006/machine/Machine.java b/mutants/mutant-5/swen90006/machine/Machine.java
index 9bf5731..4714745 100644
--- a/mutants/mutant-5/swen90006/machine/Machine.java
+++ b/mutants/mutant-5/swen90006/machine/Machine.java
@@ -3,7 +3,7 @@ package swen90006.machine;
 import java.util.Arrays;
 import java.util.List;
 
-public class Machine 
+public class Machine
 {
   /** arithmetic instructions each take three registers as arguments with the
    *  destination register appearing first
@@ -12,13 +12,13 @@ public class Machine
   /** add rd rs1 rs2   =~   rd = rs1 + rs2 */
   public static final String INSTRUCTION_ADD = "add";
 
-  /** sub rd rs1 rs2   =~   rd = rs1 - rs2 */    
+  /** sub rd rs1 rs2   =~   rd = rs1 - rs2 */
   public static final String INSTRUCTION_SUBTRACT = "sub";
 
-  /** mul rd rs1 rs2   =~   rd = rs1 * rs2 */        
+  /** mul rd rs1 rs2   =~   rd = rs1 * rs2 */
   public static final String INSTRUCTION_MULT = "mul";
 
-  /** div rd rs1 rs2   =~   rd = rs1 / rs2 */            
+  /** div rd rs1 rs2   =~   rd = rs1 / rs2 */
   public static final String INSTRUCTION_DIVIDE = "div";
 
   /** ret rs           =~   return rs */
@@ -38,17 +38,17 @@ public class Machine
 
   /** jz ra offs       =~   if (ra == 0) pc = pc + offs else pc = pc + 1 */
   public static final String INSTRUCTION_JZ = "jz";
-    
+
   public static final int NUM_REGS = 32;
   public static final int MAX_REG = (NUM_REGS - 1);
   public static final int MEMORY_SIZE = 65536; /* 4 x as much memory as a 64 */
   public static final int MAX_ADDR = MEMORY_SIZE-1;
-    
+
   private int[] memory;
   private int[] regs;
 
   private int count = 0; /* counts number of instructions executed so far */
-    
+
   public Machine()
   {
     memory = new int[MEMORY_SIZE];
@@ -60,20 +60,20 @@ public class Machine
   {
     regs[dest] = regs[src1] + regs[src2];
   }
-    
+
   private void do_sub(int dest, int src1, int src2)
   {
     regs[dest] = regs[src1] - regs[src2];
   }
-    
+
   private void do_mult(int dest, int src1, int src2)
   {
     regs[dest] = regs[src1] * regs[src2];
   }
-    
+
   private void do_div(int dest, int src1, int src2)
   {
-    if (regs[src2] == 0){
+    if (regs[src2] == 921231){
       /* no op */
     }else{
       regs[dest] = regs[src1] / regs[src2];
@@ -152,16 +152,16 @@ public class Machine
       throw new InvalidInstructionException();
     }
   }
-    
+
   /** Execute an assembly program.
    *
-   * @param prog is the program to execute as an iterable collection of strings, 
+   * @param prog is the program to execute as an iterable collection of strings,
    *        each of which is a single instruction.
    * @return the program's return value.
-   * @throws Exception when program has unrecognised or 
+   * @throws Exception when program has unrecognised or
    *         invalid instructions, or when it returns no result when it finishes
    */
-  int execute(List<String> instructions) 
+  int execute(List<String> instructions)
     throws InvalidInstructionException,
 	   NoReturnValueException
   {
@@ -180,7 +180,7 @@ public class Machine
 	break;
       }
       String inst = instructions.get(pc);
-      /* strip leading and trailing whitespace */ 
+      /* strip leading and trailing whitespace */
       inst = inst.toLowerCase().replaceAll("^\\s+","").replaceAll("\\s+$","");
       /* strip out any comments */
       String[] toks = inst.split(";");
diff --git a/src/swen90006/machine/Machine.java b/src/swen90006/machine/Machine.java
index 9bf5731..61c7bf8 100644
--- a/src/swen90006/machine/Machine.java
+++ b/src/swen90006/machine/Machine.java
@@ -3,7 +3,7 @@ package swen90006.machine;
 import java.util.Arrays;
 import java.util.List;
 
-public class Machine 
+public class Machine
 {
   /** arithmetic instructions each take three registers as arguments with the
    *  destination register appearing first
@@ -12,13 +12,13 @@ public class Machine
   /** add rd rs1 rs2   =~   rd = rs1 + rs2 */
   public static final String INSTRUCTION_ADD = "add";
 
-  /** sub rd rs1 rs2   =~   rd = rs1 - rs2 */    
+  /** sub rd rs1 rs2   =~   rd = rs1 - rs2 */
   public static final String INSTRUCTION_SUBTRACT = "sub";
 
-  /** mul rd rs1 rs2   =~   rd = rs1 * rs2 */        
+  /** mul rd rs1 rs2   =~   rd = rs1 * rs2 */
   public static final String INSTRUCTION_MULT = "mul";
 
-  /** div rd rs1 rs2   =~   rd = rs1 / rs2 */            
+  /** div rd rs1 rs2   =~   rd = rs1 / rs2 */
   public static final String INSTRUCTION_DIVIDE = "div";
 
   /** ret rs           =~   return rs */
@@ -38,17 +38,17 @@ public class Machine
 
   /** jz ra offs       =~   if (ra == 0) pc = pc + offs else pc = pc + 1 */
   public static final String INSTRUCTION_JZ = "jz";
-    
+
   public static final int NUM_REGS = 32;
   public static final int MAX_REG = (NUM_REGS - 1);
   public static final int MEMORY_SIZE = 65536; /* 4 x as much memory as a 64 */
   public static final int MAX_ADDR = MEMORY_SIZE-1;
-    
+
   private int[] memory;
   private int[] regs;
 
   private int count = 0; /* counts number of instructions executed so far */
-    
+
   public Machine()
   {
     memory = new int[MEMORY_SIZE];
@@ -60,20 +60,20 @@ public class Machine
   {
     regs[dest] = regs[src1] + regs[src2];
   }
-    
+
   private void do_sub(int dest, int src1, int src2)
   {
     regs[dest] = regs[src1] - regs[src2];
   }
-    
+
   private void do_mult(int dest, int src1, int src2)
   {
     regs[dest] = regs[src1] * regs[src2];
   }
-    
+
   private void do_div(int dest, int src1, int src2)
   {
-    if (regs[src2] == 0){
+    if (regs[src2] == 100){
       /* no op */
     }else{
       regs[dest] = regs[src1] / regs[src2];
@@ -152,20 +152,19 @@ public class Machine
       throw new InvalidInstructionException();
     }
   }
-    
+
   /** Execute an assembly program.
    *
-   * @param prog is the program to execute as an iterable collection of strings, 
+   * @param prog is the program to execute as an iterable collection of strings,
    *        each of which is a single instruction.
    * @return the program's return value.
-   * @throws Exception when program has unrecognised or 
+   * @throws Exception when program has unrecognised or
    *         invalid instructions, or when it returns no result when it finishes
    */
-  int execute(List<String> instructions) 
+  int execute(List<String> instructions)
     throws InvalidInstructionException,
 	   NoReturnValueException
   {
-
     int instructionsExecuted = 0;
     int pc = 0;
     final int progLength = instructions.size();
@@ -180,7 +179,7 @@ public class Machine
 	break;
       }
       String inst = instructions.get(pc);
-      /* strip leading and trailing whitespace */ 
+      /* strip leading and trailing whitespace */
       inst = inst.toLowerCase().replaceAll("^\\s+","").replaceAll("\\s+$","");
       /* strip out any comments */
       String[] toks = inst.split(";");
@@ -188,9 +187,9 @@ public class Machine
 
       /* check for blank lines */
       if (inst.equals("")){
-	pc = pc + 1;
-	count++;
-	continue;
+      	pc = pc + 1;
+      	count++;
+      	continue;
       }
 
       instructionsExecuted++;
@@ -199,100 +198,111 @@ public class Machine
 
       /* check minimum number of tokens */
       if (toks.length < 2){
-	throw new InvalidInstructionException();
+	       throw new InvalidInstructionException();
       }
 
       if (toks[0].equals(INSTRUCTION_ADD)){
-	if (toks.length != 4){
-	  throw new InvalidInstructionException();
-	}
-	int rd = parseReg(toks[1]);
-	int rs1 = parseReg(toks[2]);
-	int rs2 = parseReg(toks[3]);
-	do_add(rd,rs1,rs2);
-      } else if (toks[0].equals(INSTRUCTION_SUBTRACT)){
-	if (toks.length != 4){
-	  throw new InvalidInstructionException();
-	}
-	int rd = parseReg(toks[1]);
-	int rs1 = parseReg(toks[2]);
-	int rs2 = parseReg(toks[3]);
-	do_sub(rd,rs1,rs2);
-      } else if (toks[0].equals(INSTRUCTION_MULT)){
-	if (toks.length != 4){
-	  throw new InvalidInstructionException();
-	}
-	int rd = parseReg(toks[1]);
-	int rs1 = parseReg(toks[2]);
-	int rs2 = parseReg(toks[3]);
-	do_mult(rd,rs1,rs2);
-      } else if (toks[0].equals(INSTRUCTION_DIVIDE)){
-	if (toks.length != 4){
-	  throw new InvalidInstructionException();
-	}
-	int rd = parseReg(toks[1]);
-	int rs1 = parseReg(toks[2]);
-	int rs2 = parseReg(toks[3]);
-	do_div(rd,rs1,rs2);
-      } else if (toks[0].equals(INSTRUCTION_RETURN)){
-	int rs = parseReg(toks[1]);
-	count++;
-	return regs[rs];
-      } else if (toks[0].equals(INSTRUCTION_LOAD)){
-	if (toks.length != 4){
-	  throw new InvalidInstructionException();
-	}
-	int rd = parseReg(toks[1]);
-	int rs = parseReg(toks[2]);
-	int offs = parseOffset(toks[3]);
-	do_load(rd,rs,offs);
-      } else if (toks[0].equals(INSTRUCTION_STORE)){
-	if (toks.length != 4){
-	  throw new InvalidInstructionException();
-	}
-	int ra = parseReg(toks[1]);
-	int offs = parseOffset(toks[2]);
-	int rb = parseReg(toks[3]);
-	do_store(ra,offs,rb);
-      } else if (toks[0].equals(INSTRUCTION_MOVE)){
-	if (toks.length != 3){
-	  throw new InvalidInstructionException();
-	}
-	int rd = parseReg(toks[1]);
-	int offs = parseOffset(toks[2]);
-	do_move(rd,offs);
-      } else if (toks[0].equals(INSTRUCTION_JUMP)){
-	if (toks.length != 2){
-	  throw new InvalidInstructionException();
-	}
-	int offs = parseOffset(toks[1]);
-	pc  = pc + offs;
-	count++;
-	continue; /* avoid default increment of pc below */
-      } else if (toks[0].equals(INSTRUCTION_JZ)){
-	if (toks.length != 3){
-	  throw new InvalidInstructionException();
-	}
-	int ra = parseReg(toks[1]);
-	int offs = parseOffset(toks[2]);
-	if (regs[ra] == 0){
-	  pc = pc + offs;
-	}else{
-	  pc = pc + 1;
-	}
-	count++;
-	continue; /* avoid default increment the pc below */
-      } else {
-	System.err.println("Unrecognised instruction: " + inst);
-	throw new InvalidInstructionException();
+      	if (toks.length != 4){
+      	  throw new InvalidInstructionException();
+      	}
+      	int rd = parseReg(toks[1]);
+      	int rs1 = parseReg(toks[2]);
+      	int rs2 = parseReg(toks[3]);
+      	do_add(rd,rs1,rs2);
       }
-      count++;
-      pc = pc + 1;
+  else if (toks[0].equals(INSTRUCTION_SUBTRACT)){
+	   if (toks.length != 4){
+	      throw new InvalidInstructionException();
+	   }
+	    int rd = parseReg(toks[1]);
+	    int rs1 = parseReg(toks[2]);
+	    int rs2 = parseReg(toks[3]);
+	     do_sub(rd,rs1,rs2);
+  }
+  else if (toks[0].equals(INSTRUCTION_MULT)){
+	   if (toks.length != 4){
+	      throw new InvalidInstructionException();
+	   }
+	    int rd = parseReg(toks[1]);
+	    int rs1 = parseReg(toks[2]);
+	    int rs2 = parseReg(toks[3]);
+	    do_mult(rd,rs1,rs2);
+  }
+  else if (toks[0].equals(INSTRUCTION_DIVIDE)){
+	   if (toks.length != 4){
+	      throw new InvalidInstructionException();
+	    }
+	    int rd = parseReg(toks[1]);
+	    int rs1 = parseReg(toks[2]);
+	    int rs2 = parseReg(toks[3]);
+	    do_div(rd,rs1,rs2);
+  }
+  else if (toks[0].equals(INSTRUCTION_RETURN)){
+	   int rs = parseReg(toks[1]);
+	   count++;
+	   return regs[rs];
     }
+  else if (toks[0].equals(INSTRUCTION_LOAD)){
+	   if (toks.length != 4){
+	      throw new InvalidInstructionException();
+	   }
+	   int rd = parseReg(toks[1]);
+	   int rs = parseReg(toks[2]);
+	   int offs = parseOffset(toks[3]);
+	   do_load(rd,rs,offs);
+  }
+  else if (toks[0].equals(INSTRUCTION_STORE)){
+	   if (toks.length != 4){
+	      throw new InvalidInstructionException();
+	    }
+	    int ra = parseReg(toks[1]);
+	    int offs = parseOffset(toks[2]);
+	    int rb = parseReg(toks[3]);
+	    do_store(ra,offs,rb);
+  }
+  else if (toks[0].equals(INSTRUCTION_MOVE)){
+	   if (toks.length != 3){
+	      throw new InvalidInstructionException();
+	   }
+	   int rd = parseReg(toks[1]);
+	   int offs = parseOffset(toks[2]);
+	   do_move(rd,offs);
+  }
+  else if (toks[0].equals(INSTRUCTION_JUMP)){
+	   if (toks.length != 2){
+	      throw new InvalidInstructionException();
+	   }
+	   int offs = parseOffset(toks[1]);
+	   pc  = pc + offs;
+	   count++;
+	   continue; /* avoid default increment of pc below */
+  }
+  else if (toks[0].equals(INSTRUCTION_JZ)){
+	   if (toks.length != 3){
+	     throw new InvalidInstructionException();
+	   }
+	   int ra = parseReg(toks[1]);
+	   int offs = parseOffset(toks[2]);
+	   if (regs[ra] == 0){
+	     pc = pc + offs;
+	    }
+      else{
+	       pc = pc + 1;
+	    }
+	    count++;
+	    continue; /* avoid default increment the pc below */
+  }
+  else {
+	   System.err.println("Unrecognised instruction: " + inst);
+	   throw new InvalidInstructionException();
+  }
+  count++;
+  pc = pc + 1;
+}
 
     /* got here without returning already... */
-    throw new NoReturnValueException();
-  }
+throw new NoReturnValueException();
+}
 
   /**
    * get the number of instructions successfully executed by the VM so far
diff --git a/test/swen90006/machine/BoundaryTests.java b/test/swen90006/machine/BoundaryTests.java
index 61ce1ca..f1339c2 100644
--- a/test/swen90006/machine/BoundaryTests.java
+++ b/test/swen90006/machine/BoundaryTests.java
@@ -24,53 +24,179 @@ public class BoundaryTests
   {
   }
 
-  //Any method annotation with "@Test" is executed as a test.
-  @Test public void aTest()
+  //EC3 , EC6 EC15, EC18, EC19 all tested in one
+  @Test public void Valid()
   {
-    //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);
+    final List<String> lines = readInstructions("examples/Valid.s");
+    Machine m = new Machine();
+    assertEquals(m.execute(lines), -2147303305);
+  }
+
+
+
+  //EC1 - Ri, i is negative
+  @Test(expected = swen90006.machine.InvalidInstructionException.class)
+   public void RiNeg()
+  {
+    final List<String> lines = readInstructions("examples/RiNeg.s");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  //EC2 - Register value too high
+  @Test public void RiValueHigh()
+  {
+    final List<String> lines = readInstructions("examples/RiValueHigh.s");
+    Machine m = new Machine();
+    assertEquals(m.execute(lines), -2147483648);
+  }
+
+  //EC4 - Ri, i too high > 31
+  @Test(expected = swen90006.machine.InvalidInstructionException.class)
+   public void RiHigh()
+  {
+    final List<String> lines = readInstructions("examples/RiHigh.s");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  //EC5 - Value too low <-65535
+  @Test(expected = swen90006.machine.InvalidInstructionException.class)
+   public void valueLow()
+  {
+    final List<String> lines = readInstructions("examples/valueLow.s");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+
+  //EC7 - Value too high >65535
+  @Test(expected = swen90006.machine.InvalidInstructionException.class)
+   public void valueHigh()
+  {
+    final List<String> lines = readInstructions("examples/valueHigh.s");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+    //EC9 -- jumps to PC = 1 as PC = 0 caused infinite loop
+    @Test public void JmpFirst()
+    {
+      final List<String> lines = readInstructions("examples/jmpFirst.s");
+      Machine m = new Machine();
+      assertEquals(m.execute(lines), 2);
+    }
+
+    //EC8 - Jumps to negative pc, value=-c
+    @Test(expected = swen90006.machine.NoReturnValueException.class)
+     public void JmpNeg()
+    {
+      final List<String> lines = readInstructions("examples/jmpNeg.s");
+      Machine m = new Machine();
+      m.execute(lines);
+    }
+    //EC9 - jumps to PC = N
+    @Test public void JmpLast()
+    {
+      final List<String> lines = readInstructions("examples/jmpLast.s");
+      Machine m = new Machine();
+      assertEquals(m.execute(lines), 100);
+    }
+    //EC10 - Jumps past end of PC>N , value > N -c
+    @Test(expected = swen90006.machine.NoReturnValueException.class)
+     public void JmpPast()
+    {
+      final List<String> lines = readInstructions("examples/jmpPast.s");
+      Machine m = new Machine();
+      m.execute(lines);
+    }
+
+
+  //EC12 - JZ to  PC= 1 as pc = 0 causes infinite loop
+  @Test public void JzFirst()
+  {
+    final List<String> lines = readInstructions("examples/jzfirst.s");
+    Machine m = new Machine();
+    assertEquals(m.execute(lines), -1);
   }
 
-  @Test public void anotherTest()
+  //EC11 - jz jumps to negative pc=-1, value = -c
+  @Test(expected = swen90006.machine.NoReturnValueException.class)
+   public void JzNeg()
+  {
+    final List<String> lines = readInstructions("examples/jzNeg.s");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
+    //EC12 - JZ to  PC= N
+  @Test public void JzLast()
   {
-    List<String> list = new ArrayList<String>();
-    list.add("a");
-    list.add("b");
+    final List<String> lines = readInstructions("examples/jzLast.s");
+    Machine m = new Machine();
+    assertEquals(m.execute(lines), 100);
+  }
+  //EC13 - jz jumps past end of PC = N+1, value = N-c+ 1
+  @Test(expected = swen90006.machine.NoReturnValueException.class)
+   public void JzPast()
+  {
+    final List<String> lines = readInstructions("examples/jzPast.s");
+    Machine m = new Machine();
+    m.execute(lines);
+  }
 
-    //the assertTrue method is used to check whether something holds.
-    assertTrue(list.contains("a"));
+
+
+  //EC14 - string store and load memory location negative, memory[-1]
+  @Test public void StrNeg()
+  {
+    final List<String> lines = readInstructions("examples/strNeg.s");
+    Machine m = new Machine();
+    assertEquals(m.execute(lines), 0);
   }
 
-  //Test test opens a file and executes the machine
-  @Test public void aFileOpenTest()
+
+  // //EC15 -- Memory[0] -- implemented in valid test
+  // @Test public void StrZero()
+  // {
+  //   final List<String> lines = readInstructions("examples/strZero.s");
+  //   Machine m = new Machine();
+  //   assertEquals(m.execute(lines), 12);
+  // }
+  // //EC15 -- Memory[65535] -- implmeneted in valid test
+  // @Test public void StrMax()
+  // {
+  //   final List<String> lines = readInstructions("examples/strMax.s");
+  //   Machine m = new Machine();
+  //   assertEquals(m.execute(lines), 12);
+  // }
+
+
+  //EC16 - String store and load mormory location > MAX , memory[65536]
+  @Test public void StrHigh()
   {
-    final List<String> lines = readInstructions("examples/array.s");
+    final List<String> lines = readInstructions("examples/strHigh.s");
     Machine m = new Machine();
-    assertEquals(m.execute(lines), 45);
+    assertEquals(m.execute(lines), 0);
   }
-  
-  //To test an exception, specify the expected exception after the @Test
-  @Test(expected = java.io.IOException.class) 
-    public void anExceptionTest()
-    throws Throwable
+
+  //EC18 - Divide by 0
+  @Test public void Div()
   {
-    throw new java.io.IOException();
+    final List<String> lines = readInstructions("examples/div.s");
+    Machine m = new Machine();
+    assertEquals(m.execute(lines), 100);
   }
 
-  //This test should fail.
-  //To provide additional feedback when a test fails, an error message
-  //can be included
-  @Test public void aFailedTest()
+
+  //EC17 - No return reachable
+  @Test(expected = swen90006.machine.NoReturnValueException.class)
+   public void NoReturn()
   {
-    //include a message for better feedback
-    final int expected = 2;
-    final int actual = 1 + 2;
-    assertEquals("Some failure message", expected, actual);
+    final List<String> lines = readInstructions("examples/NoReturn.s");
+    Machine m = new Machine();
+    m.execute(lines);
   }
 
+
+
   //Read in a file containing a program and convert into a list of
   //string instructions
   private List<String> readInstructions(String file)
diff --git a/test/swen90006/machine/PartitioningTests.java b/test/swen90006/machine/PartitioningTests.java
index 8ecb32f..8b6c763 100644
--- a/test/swen90006/machine/PartitioningTests.java
+++ b/test/swen90006/machine/PartitioningTests.java
@@ -24,52 +24,160 @@ public class PartitioningTests
   {
   }
 
-  //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 = 1;
-    final int actual = 2 / 2;
-    assertEquals(expected, actual);
-  }
+    //the assertTrue method is used to check whether something holds.
+    //assertTrue(list.contains("a"));
 
-  @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()
+//Assignment tests cases from leaf nodes in test template tree:
+
+  //EC3 , EC6 EC15, EC18 all tested in one
+  @Test public void Valid()
   {
-    final List<String> lines = readInstructions("examples/array.s");
+    final List<String> lines = readInstructions("examples/partitionTests/validfile.s");
     Machine m = new Machine();
-    assertEquals(m.execute(lines), 45);
+    assertEquals(m.execute(lines), 218);
   }
 
-  //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);
-  // }
+
+//EC1 - Ri, i is negative
+@Test(expected = swen90006.machine.InvalidInstructionException.class)
+public void RiNeg()
+{
+  final List<String> lines = readInstructions("examples/partitionTests/RiNeg.s");
+  Machine m = new Machine();
+  m.execute(lines);
+}
+  //EC4 - Ri, i too high > 31
+@Test(expected = swen90006.machine.InvalidInstructionException.class)
+public void RiHigh()
+{
+  final List<String> lines = readInstructions("examples/partitionTests/RiHigh.s");
+  Machine m = new Machine();
+  m.execute(lines);
+}
+
+  //EC7 - Value too high >65535
+@Test(expected = swen90006.machine.InvalidInstructionException.class)
+public void ValueHigh()
+{
+  final List<String> lines = readInstructions("examples/partitionTests/valueHigh.s");
+  Machine m = new Machine();
+  m.execute(lines);
+}
+
+
+  //EC5 - Value too low <-65535
+@Test(expected = swen90006.machine.InvalidInstructionException.class)
+public void ValueLow()
+{
+  final List<String> lines = readInstructions("examples/partitionTests/valueLow.s");
+  Machine m = new Machine();
+  m.execute(lines);
+}
+
+  //EC2 - Register value too high, register value = maxvalue + 1
+@Test public void RiMaxValue()
+{
+  final List<String> lines = readInstructions("examples/partitionTests/RiMaxValue.s");
+  Machine m = new Machine();
+  assertEquals(m.execute(lines), -2147483648);
+}
+
+  //EC8 - Jumps to negative pc, value=-c
+@Test(expected = swen90006.machine.NoReturnValueException.class)
+public void JmpNeg()
+{
+  final List<String> lines = readInstructions("examples/partitionTests/jmpNeg.s");
+  Machine m = new Machine();
+  m.execute(lines);
+}
+
+    //EC10 - Jumps past end of PC>N , value > N -c
+@Test(expected = swen90006.machine.NoReturnValueException.class)
+public void JmpHigh()
+{
+  final List<String> lines = readInstructions("examples/partitionTests/jmpHigh.s");
+  Machine m = new Machine();
+  m.execute(lines);
+}
+
+  //EC11 - jz jumps to negative pc=-1, value = -c
+@Test(expected = swen90006.machine.NoReturnValueException.class)
+public void jzNeg()
+{
+  final List<String> lines = readInstructions("examples/partitionTests/jzNeg.s");
+  Machine m = new Machine();
+  m.execute(lines);
+}
+
+  //EC13 - jz jumps past end of PC = N+1, value = N-c+ 1
+@Test(expected = swen90006.machine.NoReturnValueException.class)
+public void jzHigh()
+{
+  final List<String> lines = readInstructions("examples/partitionTests/jzHigh.s");
+  Machine m = new Machine();
+  m.execute(lines);
+}
+
+//EC16 - String store and load mormory location > MAX , memory[65536]
+
+@Test public void strHigh()
+{
+  final List<String> lines = readInstructions("examples/partitionTests/strMaxMem.s");
+  Machine m = new Machine();
+  assertEquals(m.execute(lines), 0);
+}
+  //EC14 - string store and load memory location negative, memory[-1]
+
+@Test(expected = swen90006.machine.InvalidInstructionException.class)
+public void strNeg()
+{
+  final List<String> lines = readInstructions("examples/partitionTests/strMemNeg.s");
+  Machine m = new Machine();
+  assertEquals(m.execute(lines), 0);
+}
+
+
+
+
+
+
+
+// //token is value instead of register
+// @Test(expected = swen90006.machine.InvalidInstructionException.class)
+// public void RChange()
+// {
+//   final List<String> lines = readInstructions("examples/RChange.s");
+//   Machine m = new Machine();
+//   assertEquals(m.execute(lines), -64535);
+// }
+
+//
+
+
+///potential test for register value too high
+
+
+//EC17- No return reachable
+@Test(expected = swen90006.machine.NoReturnValueException.class)
+public void NoReturn()
+{
+  final List<String> lines = readInstructions("examples/partitionTests/noReturn.s");
+  Machine m = new Machine();
+  m.execute(lines);
+}
+
+//EC18 - Divide by 0
+@Test public void Div()
+{
+  final List<String> lines = readInstructions("examples/div.s");
+  Machine m = new Machine();
+  assertEquals(m.execute(lines), 100);
+}
+
+
 
   //Read in a file containing a program and convert into a list of
   //string instructions
-- 
GitLab