sudoku-terminal-game/tests/test_SudokuSolver.py
2023-07-07 23:01:09 +07:00

46 lines
1.4 KiB
Python

import sys
sys.path.append('..')
from SudokuSolver import SudokuSolver
def test_solve_sudoku():
# Test a valid Sudoku grid
grid = [
[5, 3, 0, 0, 7, 0, 0, 0, 0],
[6, 0, 0, 1, 9, 5, 0, 0, 0],
[0, 9, 8, 0, 0, 0, 0, 6, 0],
[8, 0, 0, 0, 6, 0, 0, 0, 3],
[4, 0, 0, 8, 0, 3, 0, 0, 1],
[7, 0, 0, 0, 2, 0, 0, 0, 6],
[0, 6, 0, 0, 0, 0, 2, 8, 0],
[0, 0, 0, 4, 1, 9, 0, 0, 5],
[0, 0, 0, 0, 8, 0, 0, 7, 9]
]
assert SudokuSolver.solve(grid)
assert is_valid_solution(grid)
# Test an invalid Sudoku grid
grid = [
[6, 3, 0, 0, 7, 0, 0, 0, 0],
[6, 0, 0, 1, 9, 5, 0, 0, 0],
[0, 9, 8, 0, 0, 0, 0, 6, 0],
[8, 0, 0, 0, 6, 0, 0, 0, 3],
[4, 0, 0, 8, 0, 3, 0, 0, 1],
[7, 0, 0, 0, 2, 0, 0, 0, 6],
[0, 6, 0, 0, 0, 0, 2, 8, 0],
[0, 0, 0, 4, 1, 9, 0, 0, 5],
[0, 0, 0, 0, 8, 0, 0, 0, 9]
]
assert not SudokuSolver.solve(grid)
def is_valid_solution(grid):
# Check if each row, column, and 3x3 box contains all numbers from 1 to 9
for i in range(9):
row_nums = set(grid[i])
col_nums = set(grid[j][i] for j in range(9))
box_nums = set(grid[i//3*3+j//3][i%3*3+j%3] for j in range(9))
if row_nums != set(range(1, 10)) or col_nums != set(range(1, 10)) or box_nums != set(range(1, 10)):
return False
return True