Просмотр исходного кода

Add more in depth test for the partial plagiarism case.

Sebastian Hahner 5 лет назад
Родитель
Сommit
d24a12c6be

+ 44 - 1
jplag/src/test/java/jplag/NormalComparisonTest.java

@@ -2,6 +2,8 @@ package jplag;
 
 import org.junit.Test;
 
+import java.util.Optional;
+
 import static org.junit.Assert.assertEquals;
 
 public class NormalComparisonTest extends TestBase {
@@ -48,7 +50,48 @@ public class NormalComparisonTest extends TestBase {
         JPlagResult result = runJPlagWithDefaultOptions("PartialPlagiarism");
 
         assertEquals(5, result.getNumberOfSubmissions());
-        // TODO SH: Add way more detailed assertions
+        assertEquals(10, result.getAllComparisons().size());
+
+        // All comparisons with E shall have no matches
+        result.getAllComparisons()
+                .stream()
+                .filter(comparison ->
+                        comparison.secondSubmission.name.equals("E") ||
+                                comparison.firstSubmission.name.equals("E"))
+                .forEach(comparison ->
+                        assertEquals(0f, comparison.percent(), 0.1f)
+                );
+
+        // Hard coded assertions on selected comparisons
+        assertEquals(24.6f, getSelectedPercent(result, "A", "B"), 0.1f);
+        assertEquals(99.7f, getSelectedPercent(result, "A", "C"), 0.1f);
+        assertEquals(77.9f, getSelectedPercent(result, "A", "D"), 0.1f);
+        assertEquals(24.6f, getSelectedPercent(result, "B", "C"), 0.1f);
+        assertEquals(28.3f, getSelectedPercent(result, "B", "D"), 0.1f);
+        assertEquals(77.9f, getSelectedPercent(result, "C", "D"), 0.1f);
+
+        // More detailed assertions for the plagiarism in A-D
+        var biggestMatch = getSelectedComparison(result, "A", "D");
+        assertEquals(96.4f, biggestMatch.get().percentMaxAB(), 0.1f);
+        assertEquals(65.3f, biggestMatch.get().percentMinAB(), 0.1f);
+        assertEquals(12, biggestMatch.get().matches.size());
+
+    }
+
+    // TODO SH: Methods like this should be moved to the API and also should accept wildcards
+    private float getSelectedPercent(JPlagResult result, String nameA, String nameB) {
+        return getSelectedComparison(result, nameA, nameB)
+                .map(JPlagComparison::percent)
+                .orElse(-1f);
     }
 
+    private Optional<JPlagComparison> getSelectedComparison(JPlagResult result, String nameA, String nameB) {
+        return result.getAllComparisons().stream()
+                .filter(comparison ->
+                        comparison.firstSubmission.name.equals(nameA) &&
+                                comparison.secondSubmission.name.equals(nameB) ||
+                                comparison.firstSubmission.name.equals(nameB) &&
+                                        comparison.secondSubmission.name.equals(nameA))
+                .findFirst();
+    }
 }

+ 1 - 1
jplag/src/test/java/jplag/OptionsTest.java

@@ -1,5 +1,5 @@
 package jplag;
 
 public class OptionsTest extends TestBase {
-    // TODO SH: There should be more tests testing with different combinations of JPlagOptions
+    // TODO SH: There should be more tests testing with different combinations of JPlagOptions, e.g., base code
 }