universe@23: package de.uapcore.sudoku; universe@23: universe@23: import org.junit.jupiter.api.Test; universe@23: universe@23: import static org.junit.jupiter.api.Assertions.*; universe@23: universe@23: class SolverTest { universe@23: universe@23: private int[] createTestdata() { universe@23: return new int[]{ universe@23: 0,1,0,9,0,0,8,0,0, universe@23: 0,0,0,0,0,8,0,0,4, universe@23: 6,0,5,0,0,0,7,0,0, universe@23: 0,9,0,0,6,0,0,0,8, universe@23: 0,0,0,2,0,7,0,0,0, universe@23: 8,0,0,0,3,0,0,6,0, universe@23: 0,0,2,0,0,0,5,0,3, universe@23: 1,0,0,4,0,0,0,0,0, universe@23: 0,0,6,0,0,2,0,1,0}; universe@23: } universe@23: universe@23: private int[] createTestdataSolved() { universe@23: return new int[]{ universe@23: 4,1,7,9,2,5,8,3,6, universe@23: 3,2,9,6,7,8,1,5,4, universe@23: 6,8,5,3,4,1,7,9,2, universe@23: 2,9,1,5,6,4,3,7,8, universe@23: 5,6,3,2,8,7,9,4,1, universe@23: 8,7,4,1,3,9,2,6,5, universe@23: 9,4,2,7,1,6,5,8,3, universe@23: 1,5,8,4,9,3,6,2,7, universe@23: 7,3,6,8,5,2,4,1,9}; universe@23: } universe@23: universe@23: private Field createTestField(int[] testdata) { universe@23: final var field = new Field(); universe@23: for (int x = 0 ; x < 9 ; x++) { universe@23: for (int y = 0 ; y < 9 ; y++) { universe@23: field.setCellValue(x, y, testdata[x+9*y]); universe@23: } universe@23: } universe@23: return field; universe@23: } universe@23: universe@23: universe@23: @Test universe@23: void solveSuccess() { universe@23: final var field = createTestField(createTestdata()); universe@23: final var solvedField = createTestField(createTestdataSolved()); universe@23: assertTrue(new Solver().solve(field)); universe@23: for (int x = 0 ; x < 9 ; x++) { universe@23: for (int y = 0 ; y < 9 ; y++) { universe@23: assertEquals(solvedField.getCellValue(x, y), field.getCellValue(x, y)); universe@23: } universe@23: } universe@23: } universe@23: universe@23: @Test universe@23: void solvingSetsModifiedStates() { universe@23: final var originalField = createTestField(createTestdata()); universe@23: final var field = createTestField(createTestdata()); universe@23: assertTrue(new Solver().solve(field)); universe@23: for (int x = 0 ; x < 9 ; x++) { universe@23: for (int y = 0 ; y < 9 ; y++) { universe@23: if (originalField.isCellEmpty(x, y)) { universe@23: assertTrue(field.isCellModified(x, y)); universe@23: } else { universe@23: assertFalse(field.isCellModified(x, y)); universe@23: } universe@23: } universe@23: } universe@23: } universe@23: universe@23: @Test universe@23: void checkSuccess() { universe@23: final var field = createTestField(createTestdata()); universe@23: assertTrue(new Solver().check(field)); universe@23: assertFalse(field.isAnyCellModified()); universe@23: } universe@23: universe@23: @Test universe@23: void solveFail() { universe@23: final var originalField = createTestField(createTestdata()); universe@23: final var field = createTestField(createTestdata()); universe@23: originalField.setCellValue(0, 3, 5); universe@23: field.setCellValue(0, 3, 5); universe@23: assertTrue(new Solver().check(field)); universe@23: assertFalse(new Solver().solve(field)); universe@23: for (int x = 0 ; x < 9 ; x++) { universe@23: for (int y = 0 ; y < 9 ; y++) { universe@23: if (originalField.isCellEmpty(x, y)) { universe@23: assertTrue(field.isCellEmpty(x, y)); universe@23: } else { universe@23: assertFalse(field.isCellEmpty(x, y)); universe@23: assertFalse(field.isCellModified(x, y)); universe@23: } universe@23: } universe@23: } universe@23: } universe@23: universe@23: @Test universe@23: void checkFail() { universe@23: final var field = createTestField(createTestdata()); universe@23: field.setCellValue(4, 6, 4); universe@23: assertFalse(new Solver().check(field)); universe@23: assertFalse(field.isAnyCellModified()); universe@23: } universe@23: }