adds solver test

Tue, 28 Jul 2020 14:44:48 +0200

author
Mike Becker <universe@uap-core.de>
date
Tue, 28 Jul 2020 14:44:48 +0200
changeset 23
07b9adaed78e
parent 22
06170a0be62a
child 24
c042490f3aef

adds solver test

src/test/java/de/uapcore/sudoku/SolverTest.java file | annotate | diff | comparison | revisions
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/java/de/uapcore/sudoku/SolverTest.java	Tue Jul 28 14:44:48 2020 +0200
@@ -0,0 +1,108 @@
+package de.uapcore.sudoku;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class SolverTest {
+
+    private int[] createTestdata() {
+        return new int[]{
+                0,1,0,9,0,0,8,0,0,
+                0,0,0,0,0,8,0,0,4,
+                6,0,5,0,0,0,7,0,0,
+                0,9,0,0,6,0,0,0,8,
+                0,0,0,2,0,7,0,0,0,
+                8,0,0,0,3,0,0,6,0,
+                0,0,2,0,0,0,5,0,3,
+                1,0,0,4,0,0,0,0,0,
+                0,0,6,0,0,2,0,1,0};
+    }
+
+    private int[] createTestdataSolved() {
+        return new int[]{
+                4,1,7,9,2,5,8,3,6,
+                3,2,9,6,7,8,1,5,4,
+                6,8,5,3,4,1,7,9,2,
+                2,9,1,5,6,4,3,7,8,
+                5,6,3,2,8,7,9,4,1,
+                8,7,4,1,3,9,2,6,5,
+                9,4,2,7,1,6,5,8,3,
+                1,5,8,4,9,3,6,2,7,
+                7,3,6,8,5,2,4,1,9};
+    }
+
+    private Field createTestField(int[] testdata) {
+        final var field = new Field();
+        for (int x = 0 ; x < 9 ; x++) {
+            for (int y = 0 ; y < 9 ; y++) {
+                field.setCellValue(x, y, testdata[x+9*y]);
+            }
+        }
+        return field;
+    }
+
+
+    @Test
+    void solveSuccess() {
+        final var field = createTestField(createTestdata());
+        final var solvedField = createTestField(createTestdataSolved());
+        assertTrue(new Solver().solve(field));
+        for (int x = 0 ; x < 9 ; x++) {
+            for (int y = 0 ; y < 9 ; y++) {
+                assertEquals(solvedField.getCellValue(x, y), field.getCellValue(x, y));
+            }
+        }
+    }
+
+    @Test
+    void solvingSetsModifiedStates() {
+        final var originalField = createTestField(createTestdata());
+        final var field = createTestField(createTestdata());
+        assertTrue(new Solver().solve(field));
+        for (int x = 0 ; x < 9 ; x++) {
+            for (int y = 0 ; y < 9 ; y++) {
+                if (originalField.isCellEmpty(x, y)) {
+                    assertTrue(field.isCellModified(x, y));
+                } else {
+                    assertFalse(field.isCellModified(x, y));
+                }
+            }
+        }
+    }
+
+    @Test
+    void checkSuccess() {
+        final var field = createTestField(createTestdata());
+        assertTrue(new Solver().check(field));
+        assertFalse(field.isAnyCellModified());
+    }
+
+    @Test
+    void solveFail() {
+        final var originalField = createTestField(createTestdata());
+        final var field = createTestField(createTestdata());
+        originalField.setCellValue(0, 3, 5);
+        field.setCellValue(0, 3, 5);
+        assertTrue(new Solver().check(field));
+        assertFalse(new Solver().solve(field));
+        for (int x = 0 ; x < 9 ; x++) {
+            for (int y = 0 ; y < 9 ; y++) {
+                if (originalField.isCellEmpty(x, y)) {
+                    assertTrue(field.isCellEmpty(x, y));
+                } else {
+                    assertFalse(field.isCellEmpty(x, y));
+                    assertFalse(field.isCellModified(x, y));
+                }
+            }
+        }
+    }
+
+    @Test
+    void checkFail() {
+        final var field = createTestField(createTestdata());
+        field.setCellValue(4, 6, 4);
+        assertFalse(new Solver().check(field));
+        assertFalse(field.isAnyCellModified());
+    }
+}

mercurial