Files
Sudoku/app/src/test/java/sudoku/SudokuSerializerTest.java
Persson-dev 0f5020b0b4
Some checks failed
Linux arm64 / Build (push) Failing after 29s
fix tests
2025-02-02 15:41:29 +01:00

80 lines
2.9 KiB
Java

package sudoku;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.io.File;
import java.util.Random;
import org.json.JSONObject;
import org.junit.jupiter.api.Test;
import sudoku.io.SudokuSerializer;
import sudoku.solver.RandomSolver;
import sudoku.structure.MultiDoku;
import sudoku.structure.SudokuFactory;
public class SudokuSerializerTest {
void testSerializeWithSize(int blockWidth, int blockHeight) {
var sudoku = SudokuFactory.createBasicEmptyRectangleDoku(blockWidth, blockHeight,
SudokuFactory.DEFAULT_CONSTRAINTS);
new RandomSolver().solve(sudoku);
JSONObject data = SudokuSerializer.serializeSudoku(sudoku);
MultiDoku multiDoku = SudokuSerializer.deserializeSudoku(data);
assertEquals(data.toString(), SudokuSerializer.serializeSudoku(multiDoku).toString());
}
void testSaveWithSize(int blockWidth, int blockHeight) {
MultiDoku doku = SudokuFactory.createBasicEmptyRectangleDoku(blockWidth, blockHeight,
SudokuFactory.DEFAULT_CONSTRAINTS);
new RandomSolver().solve(doku);
String savePath = SudokuSerializer.saveMultiDoku(doku);
MultiDoku otherDoku = null;
try {
otherDoku = SudokuFactory.fromfile(savePath);
assert (otherDoku != null);
assertEquals(SudokuSerializer.serializeSudoku(doku).toString(),
SudokuSerializer.serializeSudoku(otherDoku).toString());
// clean file after test
File fileToDelete = new File(savePath);
fileToDelete.delete();
} catch (Exception e) {
System.out.println(e.getMessage());
assert false;
}
}
void testSerializeX(int size) {
var sudoku = SudokuFactory.createBasicXShapedMultidoku(size, SudokuFactory.DEFAULT_CONSTRAINTS);
new RandomSolver().solve(sudoku);
JSONObject data = SudokuSerializer.serializeSudoku(sudoku);
MultiDoku multiDoku = SudokuSerializer.deserializeSudoku(data);
assertEquals(data.toString(), SudokuSerializer.serializeSudoku(multiDoku).toString());
}
@Test
void testSerialize() {
Random r = new Random();
int testCount = 20;
int minSize = 2;
int maxSize = 3;
for (int i = 0; i < testCount; i++) {
int blockWidth = r.nextInt(maxSize - minSize + 1) + minSize;
int blockHeight = r.nextInt(maxSize - minSize + 1) + minSize;
testSerializeWithSize(blockWidth, blockHeight);
}
for (int i = 0; i < testCount; i++) {
int blockWidth = r.nextInt(maxSize - minSize + 1) + minSize;
int blockHeight = r.nextInt(maxSize - minSize + 1) + minSize;
testSaveWithSize(blockWidth, blockHeight);
}
for (int i = 0; i < testCount; i++) {
int size = r.nextInt(maxSize - minSize + 1) + minSize;
testSerializeX(size);
}
}
}