OSDN Git Service

b2cc8affea185c1c11f8fa8dfe5e4d2b05acf480
[sudokuki/sudokuki.git] / test / classes / net / jankenpoi / sudokuki / solver / BruteForceGridSolverTest.java
1 package net.jankenpoi.sudokuki.solver;\r
2 \r
3 import static org.junit.Assert.*;\r
4 import net.jankenpoi.sudokuki.model.GridModel;\r
5 \r
6 import org.junit.Test;\r
7 \r
8 \r
9 public class BruteForceGridSolverTest {\r
10 \r
11         public static final String strProblemGrid1 = ""\r
12                 + "402006000"\r
13                 + "013002070"\r
14                 + "000000000"\r
15                 + "006090020"\r
16                 + "007005000"\r
17                 + "000020504"\r
18                 + "590080000"\r
19                 + "004070009"\r
20                 + "600300002";\r
21         public static final String strSolutionGrid1 = ""\r
22                 + "482716395"\r
23                 + "913542678"\r
24                 + "765938241"\r
25                 + "856493127"\r
26                 + "247165983"\r
27                 + "139827564"\r
28                 + "591284736"\r
29                 + "324671859"\r
30                 + "678359412";\r
31 \r
32         public static final String strProblemGridDifficult = ""\r
33                 + "002009050"\r
34                 + "400060000"\r
35                 + "003100700"\r
36                 + "051700000"\r
37                 + "209000000"\r
38                 + "000080004"\r
39                 + "010350000"\r
40                 + "000000307"\r
41                 + "004000020";\r
42                 \r
43         public static final String strSolutionDifficult = ""\r
44                 + "172439658"\r
45                 + "498567132"\r
46                 + "563128749"\r
47                 + "851794263"\r
48                 + "249613875"\r
49                 + "736285914"\r
50                 + "917352486"\r
51                 + "625841397"\r
52                 + "384976521";\r
53         \r
54         public static final String strProblemGridDiabolic = ""\r
55                 + "900001002"\r
56                 + "080605070"\r
57                 + "000008000"\r
58                 + "453000090"\r
59                 + "000070000"\r
60                 + "070000521"\r
61                 + "000900000"\r
62                 + "020107050"\r
63                 + "300200006";\r
64         \r
65         public static final String strSolutionGridDiabolic = ""\r
66                 + "935741862"\r
67                 + "184625379"\r
68                 + "762398145"\r
69                 + "453812697"\r
70                 + "216579438"\r
71                 + "879463521"\r
72                 + "547986213"\r
73                 + "628137954"\r
74                 + "391254786";\r
75         \r
76         GridModel problemGrid1 = new GridModel(strProblemGrid1);\r
77         GridModel solutionGrid1 = new GridModel(strSolutionGrid1);\r
78         GridModel problemGridDifficult = new GridModel(strProblemGridDifficult);\r
79         GridModel solutionGridDifficult = new GridModel(strSolutionDifficult);\r
80         GridModel problemGridDiabolic = new GridModel(strProblemGridDiabolic);\r
81         GridModel solutionGridDiabolic = new GridModel(strSolutionGridDiabolic);\r
82         \r
83         @Test\r
84         public void testCopyCurrentFlagsToNextPosition() {\r
85                 BruteForceGridSolver solver = new BruteForceGridSolver(problemGrid1);\r
86                 solver.copyCurrentFlagsToNextPosition();\r
87                 solver.forwardToNextPosition();\r
88                 \r
89                 int currentIndex = solver.getCurrentIndex();\r
90                 int[] cellShadowMemory = solver.getCellShadowMemory();\r
91                 assertTrue(currentIndex - GridSolver.GRID_LENGTH >= 0);\r
92                 for (int i=currentIndex - GridSolver.GRID_LENGTH; i<currentIndex; i++) {\r
93                         assertEquals(cellShadowMemory[i], cellShadowMemory[i+GridSolver.GRID_LENGTH]);\r
94                 }\r
95         }\r
96         \r
97         @Test\r
98         public void testResolveGrid1() {\r
99                 GridSolver solver = new BruteForceGridSolver(problemGrid1);\r
100                 GridSolution solution = solver.resolve();\r
101                 assertTrue(solution.isSolved());\r
102                 \r
103                 GridModel solGrid = solution.getSolutionGrid();\r
104                 for (int li=0; li<9; li++) {\r
105                         for (int co=0; co<9; co++) {\r
106                                 System.out.print(solGrid.getValueAt(li, co));\r
107                         }\r
108                 }\r
109                 System.out.println();\r
110                 \r
111                 assertTrue(areAllValuesEqual(solution.getSolutionGrid(), solutionGrid1));\r
112         }\r
113 \r
114         @Test\r
115         public void testResolveDifficultGrid() {\r
116                 GridSolver solver = new BruteForceGridSolver(problemGridDifficult);\r
117                 GridSolution solution = solver.resolve();\r
118                 assertTrue(solution.isSolved());\r
119                 \r
120                 GridModel solGrid = solution.getSolutionGrid();\r
121                 for (int li=0; li<9; li++) {\r
122                         for (int co=0; co<9; co++) {\r
123                                 System.out.print(solGrid.getValueAt(li, co));\r
124                         }\r
125                 }\r
126                 System.out.println();\r
127                 \r
128                 assertTrue(areAllValuesEqual(solution.getSolutionGrid(), solutionGridDifficult));\r
129         }\r
130         \r
131         @Test\r
132         public void testResolveDiabolicGrid() {\r
133                 GridSolver solver = new BruteForceGridSolver(problemGridDiabolic);\r
134                 System.out.println();\r
135                 System.out\r
136                                 .println("BruteForceGridSolverTest.testResolveDifficultGrid() *** start test ***");\r
137                 System.out.println();\r
138                 GridSolution solution = solver.resolve();\r
139                 assertTrue(solution.isSolved());\r
140                 \r
141                 GridModel solGrid = solution.getSolutionGrid();\r
142                 for (int li=0; li<9; li++) {\r
143                         for (int co=0; co<9; co++) {\r
144                                 System.out.print(solGrid.getValueAt(li, co));\r
145                         }\r
146                 }\r
147                 System.out.println();\r
148                 \r
149                 assertTrue(areAllValuesEqual(solution.getSolutionGrid(), solutionGridDiabolic));\r
150         }\r
151         \r
152         @Test\r
153         public void testResolve10RandomGrids() {\r
154                 for (int i=0; i<10; i++) {\r
155                         GridSolver solver = new BruteForceGridSolver(new GridModel());\r
156                         GridSolution solution = solver.resolve();\r
157                         assertTrue(solution.isSolved());\r
158                 }\r
159         }\r
160         \r
161         private boolean areAllValuesEqual(GridModel solutionGrid,\r
162                         GridModel otherGrid) {\r
163                 int[] solCells = solutionGrid.cloneCellInfosAsInts();\r
164                 int[] otherCells = otherGrid.cloneCellInfosAsInts();\r
165                 boolean allEqual = true;\r
166                 for (int li=0; li<9; li++) {\r
167                         for (int co=0; co<9; co++) {\r
168                                 allEqual &= (solCells[9*li+co] == otherCells[9*li+co]);\r
169                         }\r
170                 }\r
171                 return allEqual;\r
172         }\r
173         \r
174 }\r