diff --git a/.classpath b/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..23c928d12bb2cc130046f7aae5adb7c5fe8cbb81 --- /dev/null +++ b/.classpath @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="src" path="mutants/mutant-1"/> + <classpathentry kind="src" path="mutants/mutant-2"/> + <classpathentry kind="src" path="mutants/mutant-3"/> + <classpathentry kind="src" path="mutants/mutant-4"/> + <classpathentry kind="src" path="mutants/mutant-5"/> + <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="test"/> + <classpathentry kind="lib" path="lib/hamcrest-core-1.3.jar"/> + <classpathentry kind="lib" path="lib/junit-4.11.jar"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ae3c1726048cd06b9a143e0376ed46dd9b9a8d53 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/.project b/.project new file mode 100644 index 0000000000000000000000000000000000000000..88a7b6979f0884ea8dac6024f94aadf11c17ea97 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>SWEN90006-A1-2018</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/examples/EC1.s b/examples/EC1.s new file mode 100644 index 0000000000000000000000000000000000000000..8c3e45c4d7b1c4ef72e4f45aee3049f711fd96ed --- /dev/null +++ b/examples/EC1.s @@ -0,0 +1,4 @@ + ;; R1 hold N + MOV R1 1 + RET R1 + diff --git a/examples/EC10.s b/examples/EC10.s new file mode 100644 index 0000000000000000000000000000000000000000..197e689b13abfc75595a2260cb22d293dd8e8e9c --- /dev/null +++ b/examples/EC10.s @@ -0,0 +1,4 @@ + MOV R1 1 + LDR R-1 R1 1 + RET R-1 + diff --git a/examples/EC11.s b/examples/EC11.s new file mode 100644 index 0000000000000000000000000000000000000000..eaefeb5be772fca91c4f9810afecec8c574f98aa --- /dev/null +++ b/examples/EC11.s @@ -0,0 +1,6 @@ + MOV R0 0 + MOV R2 3 + STR R0 -1 R2 + LDR R1 R0 -1 + RET R1 + diff --git a/examples/EC12-1.s b/examples/EC12-1.s new file mode 100644 index 0000000000000000000000000000000000000000..7a80117a8afc714be5b86bc9f7657d4213c6d849 --- /dev/null +++ b/examples/EC12-1.s @@ -0,0 +1,6 @@ + MOV R0 0 + MOV R2 3 + STR R0 0 R2 + LDR R1 R0 0 + RET R1 + diff --git a/examples/EC12-2.s b/examples/EC12-2.s new file mode 100644 index 0000000000000000000000000000000000000000..46b189cc653340be34157ce12a98714d22655709 --- /dev/null +++ b/examples/EC12-2.s @@ -0,0 +1,6 @@ + MOV R0 0 + MOV R2 3 + STR R0 65535 R2 + LDR R1 R0 65535 + RET R1 + diff --git a/examples/EC13.s b/examples/EC13.s new file mode 100644 index 0000000000000000000000000000000000000000..b234243106a1813f1d87c58d97c7dfd022997f65 --- /dev/null +++ b/examples/EC13.s @@ -0,0 +1,6 @@ + MOV R0 1 + MOV R2 3 + STR R0 65535 R2 + LDR R1 R0 65535 + RET R1 + diff --git a/examples/EC14.s b/examples/EC14.s new file mode 100644 index 0000000000000000000000000000000000000000..78dace805484eaa96287326b60fdbe22eddca757 --- /dev/null +++ b/examples/EC14.s @@ -0,0 +1,3 @@ + MOV R0 1 + LDR R32 R0 1 + RET R32 diff --git a/examples/EC15.s b/examples/EC15.s new file mode 100644 index 0000000000000000000000000000000000000000..407f5f7657d0048d7ee06abeceb888f358401ecf --- /dev/null +++ b/examples/EC15.s @@ -0,0 +1,8 @@ + MOV R-1 0 + MOV R2 2 + MOV R3 1 + JZ R-1 2 + SUB R0 R2 R3 + ADD R4 R2 R3 + RET R4 + diff --git a/examples/EC16.s b/examples/EC16.s new file mode 100644 index 0000000000000000000000000000000000000000..1b9e17a46822bc4a4b39a6e1c76e120abf746370 --- /dev/null +++ b/examples/EC16.s @@ -0,0 +1,7 @@ + MOV R1 0 + MOV R2 2 + MOV R3 1 + JZ R1 -5 + SUB R0 R2 R3 + ADD R4 R2 R3 + RET R4 diff --git a/examples/EC17-1.s b/examples/EC17-1.s new file mode 100644 index 0000000000000000000000000000000000000000..997867bfbf57fa784566c020f3451db6b4314b3f --- /dev/null +++ b/examples/EC17-1.s @@ -0,0 +1,8 @@ + MOV R1 0 + MOV R2 2 + MOV R3 1 + JZ R1 1 + SUB R0 R2 R3 + ADD R4 R2 R3 + RET R4 + diff --git a/examples/EC17-2.s b/examples/EC17-2.s new file mode 100644 index 0000000000000000000000000000000000000000..0e2d636d3181c359f81630f68be83a47177f474e --- /dev/null +++ b/examples/EC17-2.s @@ -0,0 +1,9 @@ + MOV R1 0 + MOV R2 2 + MOV R3 1 + MOV R4 5 + JZ R1 3 + SUB R0 R2 R3 + ADD R4 R2 R3 + RET R4 + diff --git a/examples/EC18.s b/examples/EC18.s new file mode 100644 index 0000000000000000000000000000000000000000..7c5ea9bf6e651c501be2f86824b953295a8ecc0a --- /dev/null +++ b/examples/EC18.s @@ -0,0 +1,7 @@ + MOV R1 0 + MOV R2 2 + MOV R3 1 + JZ R1 3 + SUB R0 R2 R3 + ADD R4 R2 R3 + RET R4 diff --git a/examples/EC19.s b/examples/EC19.s new file mode 100644 index 0000000000000000000000000000000000000000..acc14438a12f218fad9234db5668bf63c16325da --- /dev/null +++ b/examples/EC19.s @@ -0,0 +1,8 @@ + MOV R32 0 + MOV R2 2 + MOV R3 1 + JZ R32 2 + SUB R0 R2 R3 + ADD R4 R2 R3 + RET R4 + diff --git a/examples/EC2.s b/examples/EC2.s new file mode 100644 index 0000000000000000000000000000000000000000..386c61c4a4e486d34b8b4e21e4af248d214c809e --- /dev/null +++ b/examples/EC2.s @@ -0,0 +1,5 @@ + MOV R1 1 + MOV R2 2 + ADD R-1 R1 R2 + RET R-1 + diff --git a/examples/EC20.s b/examples/EC20.s new file mode 100644 index 0000000000000000000000000000000000000000..652b28119194ce9f8ef972d7d443c57ad6e5343f --- /dev/null +++ b/examples/EC20.s @@ -0,0 +1,4 @@ + ERC R1 R2 + YGT R3 R1 R2 + RET R3 + diff --git a/examples/EC21.s b/examples/EC21.s new file mode 100644 index 0000000000000000000000000000000000000000..257a7d77b050e9c57b8428fc20d2adee7b6da3e9 --- /dev/null +++ b/examples/EC21.s @@ -0,0 +1,2 @@ + MOV R1 1 + MOV R2 2 diff --git a/examples/EC3-1.s b/examples/EC3-1.s new file mode 100644 index 0000000000000000000000000000000000000000..f44acab7f6434b537d2d09d943060705adbbdac6 --- /dev/null +++ b/examples/EC3-1.s @@ -0,0 +1,5 @@ + MOV R1 1 + MOV R2 2 + ADD R0 R1 R2 + RET R0 + diff --git a/examples/EC3-2.s b/examples/EC3-2.s new file mode 100644 index 0000000000000000000000000000000000000000..855320f2e551d0388148e27f2393a0445928a528 --- /dev/null +++ b/examples/EC3-2.s @@ -0,0 +1,5 @@ + MOV R1 1 + MOV R2 2 + ADD R31 R1 R2 + RET R31 + diff --git a/examples/EC4.s b/examples/EC4.s new file mode 100644 index 0000000000000000000000000000000000000000..b693c1598cf30494e04b587ae604ead19e9214ec --- /dev/null +++ b/examples/EC4.s @@ -0,0 +1,5 @@ + MOV R1 1 + MOV R2 2 + ADD R32 R1 R2 + RET R32 + diff --git a/examples/EC5.s b/examples/EC5.s new file mode 100644 index 0000000000000000000000000000000000000000..25580718e13cae5eb0dfe29fe9a125e795a6f0af --- /dev/null +++ b/examples/EC5.s @@ -0,0 +1,4 @@ + MOV R-1 1 + MOV R2 2 + ADD R3 R-1 R2 + RET R3 diff --git a/examples/EC6.s b/examples/EC6.s new file mode 100644 index 0000000000000000000000000000000000000000..fdd1682e013b96b1f74c13c03d9eeef2e0ed2f77 --- /dev/null +++ b/examples/EC6.s @@ -0,0 +1,5 @@ + MOV R0 -65536 + MOV R1 2 + ADD R3 R0 R1 + RET R3 + diff --git a/examples/EC7-1.s b/examples/EC7-1.s new file mode 100644 index 0000000000000000000000000000000000000000..b888d48f1f6c08778dee0e42139415c76f14def2 --- /dev/null +++ b/examples/EC7-1.s @@ -0,0 +1,4 @@ + MOV R0 -65535 + MOV R1 2 + ADD R3 R0 R1 + RET R3 diff --git a/examples/EC7-2.s b/examples/EC7-2.s new file mode 100644 index 0000000000000000000000000000000000000000..b70382e0a0be04f484b6b221a8a2f9eef7380814 --- /dev/null +++ b/examples/EC7-2.s @@ -0,0 +1,5 @@ + MOV R0 65535 + MOV R1 2 + ADD R3 R0 R1 + RET R3 + diff --git a/examples/EC8.s b/examples/EC8.s new file mode 100644 index 0000000000000000000000000000000000000000..7b586eb12f969dd36e4e8756f6753e925265f066 --- /dev/null +++ b/examples/EC8.s @@ -0,0 +1,5 @@ + MOV R0 65536 + MOV R1 2 + ADD R3 R0 R1 + RET R3 + diff --git a/examples/EC9.s b/examples/EC9.s new file mode 100644 index 0000000000000000000000000000000000000000..4934ecf0251779f7e050543adbfc6f7da38c245a --- /dev/null +++ b/examples/EC9.s @@ -0,0 +1,5 @@ + MOV R32 1 + MOV R1 2 + ADD R3 R32 R1 + RET R3 + diff --git a/mutants/mutant-1/swen90006/machine/Machine.java b/mutants/mutant-1/swen90006/machine/Machine.java index 3dd0f55632566e9080379ef8f6f0e69d6033683f..9bf57316d1c736ea2bd1c62bd6df3c6c0282f331 100644 --- a/mutants/mutant-1/swen90006/machine/Machine.java +++ b/mutants/mutant-1/swen90006/machine/Machine.java @@ -198,7 +198,7 @@ public class Machine toks = inst.split("\\s+"); /* check minimum number of tokens */ - if (toks.length >= 2){ + if (toks.length < 2){ throw new InvalidInstructionException(); } diff --git a/mutants/mutant-2/swen90006/machine/Machine.java b/mutants/mutant-2/swen90006/machine/Machine.java index 0939a8c8fbfd5e564f09dd5a5cc585b84b5d19bc..1ff5cbf47db17acd1b5ae71b1697fc70bdca7cc2 100644 --- a/mutants/mutant-2/swen90006/machine/Machine.java +++ b/mutants/mutant-2/swen90006/machine/Machine.java @@ -211,7 +211,7 @@ public class Machine int rs2 = parseReg(toks[3]); do_add(rd,rs1,rs2); } else if (toks[0].equals(INSTRUCTION_SUBTRACT)){ - if (toks.length = 4){ + if (toks.length == 4){ throw new InvalidInstructionException(); } int rd = parseReg(toks[1]); diff --git a/test/swen90006/machine/BoundaryTests.java b/test/swen90006/machine/BoundaryTests.java index 61ce1ca647f325fbf452047408c1e22d9befcb99..77ad3e3b29bbeb0c2c4773a6038d236e654b13cd 100644 --- a/test/swen90006/machine/BoundaryTests.java +++ b/test/swen90006/machine/BoundaryTests.java @@ -52,24 +52,182 @@ public class BoundaryTests assertEquals(m.execute(lines), 45); } + @Test public void EC1() + { + final List<String> lines = readInstructions("examples/EC1.s"); + Machine m = new Machine(); + assertEquals(m.execute(lines), 1); + } + + @Test(expected = swen90006.machine.InvalidInstructionException.class) + public void EC2() + { + final List<String> lines = readInstructions("examples/EC2.s"); + Machine m = new Machine(); + m.execute(lines); + } + + @Test public void EC31() + { + final List<String> lines = readInstructions("examples/EC3-1.s"); + Machine m = new Machine(); + assertEquals(m.execute(lines), 3); + } + + @Test public void EC32() + { + final List<String> lines = readInstructions("examples/EC3-2.s"); + Machine m = new Machine(); + assertEquals(m.execute(lines), 3); + } + + @Test(expected = swen90006.machine.InvalidInstructionException.class) + public void EC4() + { + final List<String> lines = readInstructions("examples/EC4.s"); + Machine m = new Machine(); + m.execute(lines); + } + + @Test(expected = swen90006.machine.InvalidInstructionException.class) + public void EC5() + { + final List<String> lines = readInstructions("examples/EC5.s"); + Machine m = new Machine(); + m.execute(lines); + } + + @Test(expected = swen90006.machine.InvalidInstructionException.class) + public void EC6() + { + final List<String> lines = readInstructions("examples/EC6.s"); + Machine m = new Machine(); + m.execute(lines); + } + + @Test public void EC71() + { + final List<String> lines = readInstructions("examples/EC7-1.s"); + Machine m = new Machine(); + assertEquals(m.execute(lines), -65533); + } + + @Test public void EC72() + { + final List<String> lines = readInstructions("examples/EC7-2.s"); + Machine m = new Machine(); + assertEquals(m.execute(lines), 65537); + } + + @Test(expected = swen90006.machine.InvalidInstructionException.class) + public void EC8() + { + final List<String> lines = readInstructions("examples/EC8.s"); + Machine m = new Machine(); + m.execute(lines); + } + + @Test(expected = swen90006.machine.InvalidInstructionException.class) + public void EC9() + { + final List<String> lines = readInstructions("examples/EC9.s"); + Machine m = new Machine(); + m.execute(lines); + } + + @Test(expected = swen90006.machine.InvalidInstructionException.class) + public void EC10() + { + final List<String> lines = readInstructions("examples/EC10.s"); + Machine m = new Machine(); + m.execute(lines); + } + + @Test public void EC11() + { + final List<String> lines = readInstructions("examples/EC11.s"); + Machine m = new Machine(); + assertEquals(m.execute(lines), 0); + } + + @Test public void EC121() + { + final List<String> lines = readInstructions("examples/EC12-1.s"); + Machine m = new Machine(); + assertEquals(m.execute(lines), 3); + } + + @Test public void EC122() + { + final List<String> lines = readInstructions("examples/EC12-2.s"); + Machine m = new Machine(); + assertEquals(m.execute(lines), 3); + } + + @Test public void EC13() + { + final List<String> lines = readInstructions("examples/EC13.s"); + Machine m = new Machine(); + assertEquals(m.execute(lines), 0); + } + + @Test(expected = swen90006.machine.InvalidInstructionException.class) + public void EC14() + { + final List<String> lines = readInstructions("examples/EC14.s"); + Machine m = new Machine(); + m.execute(lines); + } + + @Test(expected = swen90006.machine.InvalidInstructionException.class) + public void EC15() + { + final List<String> lines = readInstructions("examples/EC15.s"); + Machine m = new Machine(); + m.execute(lines); + } + + @Test(expected = swen90006.machine.NoReturnValueException.class) + public void EC16() + { + final List<String> lines = readInstructions("examples/EC16.s"); + Machine m = new Machine(); + m.execute(lines); + } + + @Test public void EC171() + { + final List<String> lines = readInstructions("examples/EC17-1.s"); + Machine m = new Machine(); + assertEquals(m.execute(lines), 3); + } + + @Test public void EC172() + { + final List<String> lines = readInstructions("examples/EC17-2.s"); + Machine m = new Machine(); + assertEquals(m.execute(lines), 5); + } + + //To test an exception, specify the expected exception after the @Test - @Test(expected = java.io.IOException.class) + /* @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() + /*@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 5494b44f4615351a610fc7b0b649d30b4b2d0a40..aad359dadaab3853f9af4f5fc835d3b3af271455 100644 --- a/test/swen90006/machine/PartitioningTests.java +++ b/test/swen90006/machine/PartitioningTests.java @@ -53,23 +53,23 @@ public class PartitioningTests } //To test an exception, specify the expected exception after the @Test - @Test(expected = java.io.IOException.class) + /*@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() + /*@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