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