src/test/java/de/uapcore/sudoku/SolverTest.java

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
permissions
-rw-r--r--

adds solver test

universe@23 1 package de.uapcore.sudoku;
universe@23 2
universe@23 3 import org.junit.jupiter.api.Test;
universe@23 4
universe@23 5 import static org.junit.jupiter.api.Assertions.*;
universe@23 6
universe@23 7 class SolverTest {
universe@23 8
universe@23 9 private int[] createTestdata() {
universe@23 10 return new int[]{
universe@23 11 0,1,0,9,0,0,8,0,0,
universe@23 12 0,0,0,0,0,8,0,0,4,
universe@23 13 6,0,5,0,0,0,7,0,0,
universe@23 14 0,9,0,0,6,0,0,0,8,
universe@23 15 0,0,0,2,0,7,0,0,0,
universe@23 16 8,0,0,0,3,0,0,6,0,
universe@23 17 0,0,2,0,0,0,5,0,3,
universe@23 18 1,0,0,4,0,0,0,0,0,
universe@23 19 0,0,6,0,0,2,0,1,0};
universe@23 20 }
universe@23 21
universe@23 22 private int[] createTestdataSolved() {
universe@23 23 return new int[]{
universe@23 24 4,1,7,9,2,5,8,3,6,
universe@23 25 3,2,9,6,7,8,1,5,4,
universe@23 26 6,8,5,3,4,1,7,9,2,
universe@23 27 2,9,1,5,6,4,3,7,8,
universe@23 28 5,6,3,2,8,7,9,4,1,
universe@23 29 8,7,4,1,3,9,2,6,5,
universe@23 30 9,4,2,7,1,6,5,8,3,
universe@23 31 1,5,8,4,9,3,6,2,7,
universe@23 32 7,3,6,8,5,2,4,1,9};
universe@23 33 }
universe@23 34
universe@23 35 private Field createTestField(int[] testdata) {
universe@23 36 final var field = new Field();
universe@23 37 for (int x = 0 ; x < 9 ; x++) {
universe@23 38 for (int y = 0 ; y < 9 ; y++) {
universe@23 39 field.setCellValue(x, y, testdata[x+9*y]);
universe@23 40 }
universe@23 41 }
universe@23 42 return field;
universe@23 43 }
universe@23 44
universe@23 45
universe@23 46 @Test
universe@23 47 void solveSuccess() {
universe@23 48 final var field = createTestField(createTestdata());
universe@23 49 final var solvedField = createTestField(createTestdataSolved());
universe@23 50 assertTrue(new Solver().solve(field));
universe@23 51 for (int x = 0 ; x < 9 ; x++) {
universe@23 52 for (int y = 0 ; y < 9 ; y++) {
universe@23 53 assertEquals(solvedField.getCellValue(x, y), field.getCellValue(x, y));
universe@23 54 }
universe@23 55 }
universe@23 56 }
universe@23 57
universe@23 58 @Test
universe@23 59 void solvingSetsModifiedStates() {
universe@23 60 final var originalField = createTestField(createTestdata());
universe@23 61 final var field = createTestField(createTestdata());
universe@23 62 assertTrue(new Solver().solve(field));
universe@23 63 for (int x = 0 ; x < 9 ; x++) {
universe@23 64 for (int y = 0 ; y < 9 ; y++) {
universe@23 65 if (originalField.isCellEmpty(x, y)) {
universe@23 66 assertTrue(field.isCellModified(x, y));
universe@23 67 } else {
universe@23 68 assertFalse(field.isCellModified(x, y));
universe@23 69 }
universe@23 70 }
universe@23 71 }
universe@23 72 }
universe@23 73
universe@23 74 @Test
universe@23 75 void checkSuccess() {
universe@23 76 final var field = createTestField(createTestdata());
universe@23 77 assertTrue(new Solver().check(field));
universe@23 78 assertFalse(field.isAnyCellModified());
universe@23 79 }
universe@23 80
universe@23 81 @Test
universe@23 82 void solveFail() {
universe@23 83 final var originalField = createTestField(createTestdata());
universe@23 84 final var field = createTestField(createTestdata());
universe@23 85 originalField.setCellValue(0, 3, 5);
universe@23 86 field.setCellValue(0, 3, 5);
universe@23 87 assertTrue(new Solver().check(field));
universe@23 88 assertFalse(new Solver().solve(field));
universe@23 89 for (int x = 0 ; x < 9 ; x++) {
universe@23 90 for (int y = 0 ; y < 9 ; y++) {
universe@23 91 if (originalField.isCellEmpty(x, y)) {
universe@23 92 assertTrue(field.isCellEmpty(x, y));
universe@23 93 } else {
universe@23 94 assertFalse(field.isCellEmpty(x, y));
universe@23 95 assertFalse(field.isCellModified(x, y));
universe@23 96 }
universe@23 97 }
universe@23 98 }
universe@23 99 }
universe@23 100
universe@23 101 @Test
universe@23 102 void checkFail() {
universe@23 103 final var field = createTestField(createTestdata());
universe@23 104 field.setCellValue(4, 6, 4);
universe@23 105 assertFalse(new Solver().check(field));
universe@23 106 assertFalse(field.isAnyCellModified());
universe@23 107 }
universe@23 108 }

mercurial