1 package net.jankenpoi.sudokuki.solver;
\r
3 import static org.junit.Assert.*;
\r
4 import net.jankenpoi.sudokuki.model.GridModel;
\r
6 import org.junit.Test;
\r
9 public class BruteForceGridSolverTest {
\r
11 public static final String strProblemGrid1 = ""
\r
21 public static final String strSolutionGrid1 = ""
\r
32 public static final String strProblemGridDifficult = ""
\r
43 public static final String strSolutionDifficult = ""
\r
54 public static final String strProblemGridDiabolic = ""
\r
65 public static final String strSolutionGridDiabolic = ""
\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
84 public void testCopyCurrentFlagsToNextPosition() {
\r
85 BruteForceGridSolver solver = new BruteForceGridSolver(problemGrid1);
\r
86 solver.copyCurrentFlagsToNextPosition();
\r
87 solver.forwardToNextPosition();
\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
98 public void testResolveGrid1() {
\r
99 GridSolver solver = new BruteForceGridSolver(problemGrid1);
\r
100 GridSolution solution = solver.resolve();
\r
101 assertTrue(solution.isSolved());
\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
109 System.out.println();
\r
111 assertTrue(areAllValuesEqual(solution.getSolutionGrid(), solutionGrid1));
\r
115 public void testResolveDifficultGrid() {
\r
116 GridSolver solver = new BruteForceGridSolver(problemGridDifficult);
\r
117 GridSolution solution = solver.resolve();
\r
118 assertTrue(solution.isSolved());
\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
126 System.out.println();
\r
128 assertTrue(areAllValuesEqual(solution.getSolutionGrid(), solutionGridDifficult));
\r
132 public void testResolveDiabolicGrid() {
\r
133 GridSolver solver = new BruteForceGridSolver(problemGridDiabolic);
\r
134 System.out.println();
\r
136 .println("BruteForceGridSolverTest.testResolveDifficultGrid() *** start test ***");
\r
137 System.out.println();
\r
138 GridSolution solution = solver.resolve();
\r
139 assertTrue(solution.isSolved());
\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
147 System.out.println();
\r
149 assertTrue(areAllValuesEqual(solution.getSolutionGrid(), solutionGridDiabolic));
\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
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