Tue, 28 Jul 2020 14:44:48 +0200
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 | } |