From f449d2343e40ffadbfb3c85e1f64fca617d99414 Mon Sep 17 00:00:00 2001 From: Imbus Date: Sun, 10 Dec 2023 15:03:10 +0100 Subject: [PATCH 1/2] Documentation now passes the gradle doctest --- app/src/main/java/sudoku/SudokuSolver.java | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/sudoku/SudokuSolver.java b/app/src/main/java/sudoku/SudokuSolver.java index edf6ac3..758e5b5 100644 --- a/app/src/main/java/sudoku/SudokuSolver.java +++ b/app/src/main/java/sudoku/SudokuSolver.java @@ -1,5 +1,6 @@ package sudoku; +/** SudokuSolver is an interface for implementing Sudoku solvers */ public interface SudokuSolver { /** * Set sudoku board, numbers 1-9 are fixed values, 0 is unsolved. @@ -7,10 +8,12 @@ public interface SudokuSolver { * @param board a board to copy values from * @throws IllegalArgumentException if board is invalid, e.g. not 9x9 */ - void setBoard(int[][] board) throws IllegalArgumentException; + void setBoard(int[][] board) throws IllegalArgumentException, NullPointerException; /** * Get a copy of the sudoku board + * + * @return a copy of the sudoku board */ int[][] getBoard(); @@ -24,9 +27,9 @@ public interface SudokuSolver { /** * Check if digit is legal on the current board * - * @param row - * @param col - * @param nbr + * @param row row + * @param col column + * @param nbr number to check * @return true if legal */ boolean isLegal(int row, int col, int nbr); @@ -34,8 +37,8 @@ public interface SudokuSolver { /** * Get number on board * - * @param row - * @param col + * @param row row + * @param col column * @return number on board */ int get(int row, int col); @@ -43,9 +46,9 @@ public interface SudokuSolver { /** * Set number on board, numbers 1-9 are fixed values, 0 is unsolved. * - * @param row - * @param col - * @param nbr + * @param row row + * @param col column + * @param nbr number to set */ void set(int row, int col, int nbr); From 175545d3d593b9d0095a4393632c3a22a176ec8d Mon Sep 17 00:00:00 2001 From: Imbus Date: Sun, 10 Dec 2023 15:04:04 +0100 Subject: [PATCH 2/2] Suitable exceptions for setBoard with corresponding tests --- app/src/main/java/sudoku/Solver.java | 10 +++++++--- app/src/test/java/sudoku/SolverTest.java | 7 +++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/sudoku/Solver.java b/app/src/main/java/sudoku/Solver.java index 0f4ad33..2c9bb37 100644 --- a/app/src/main/java/sudoku/Solver.java +++ b/app/src/main/java/sudoku/Solver.java @@ -12,7 +12,11 @@ public class Solver implements SudokuSolver { /** {@inheritDoc} */ @Override - public void setBoard(int[][] board) { + public void setBoard(int[][] board) throws IllegalArgumentException, NullPointerException { + if (board == null) + throw new NullPointerException("Board cannot be null"); + if (board.length != 9 || board[0].length != 9) + throw new IllegalArgumentException("Board must be 9x9"); this.board = board; } @@ -28,7 +32,7 @@ public class Solver implements SudokuSolver { board = new int[9][9]; } - /*{@inheritDoc} */ + /* {@inheritDoc} */ @Override public boolean solve() { return solve(0, 0); @@ -107,7 +111,7 @@ public class Solver implements SudokuSolver { } // Recursively call randomizeBoard() until we get a solvable board - // This is expensive, and there should be some voodoo magic that computes this in n^2 time + // This is expensive, and there should be a better way to do this if (!isSolvable()) { randomizeBoard(difficulty); } diff --git a/app/src/test/java/sudoku/SolverTest.java b/app/src/test/java/sudoku/SolverTest.java index c8a9dff..af637e1 100644 --- a/app/src/test/java/sudoku/SolverTest.java +++ b/app/src/test/java/sudoku/SolverTest.java @@ -106,4 +106,11 @@ class SolverTest { solver.set(7, 1, 8); assertFalse(solver.solve()); } + + @Test + void setBoardInvalidInputThrowsTest() { + Solver solver = new Solver(); + assertThrows(NullPointerException.class, () -> solver.setBoard(null)); + assertThrows(IllegalArgumentException.class, () -> solver.setBoard(new int[8][8])); + } }