-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsolver_test.py
109 lines (84 loc) · 2.67 KB
/
solver_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
from sudoku_solver import SudokuSolver
import pytest
import unittest
import copy
import random
solved_board = [
[3, 1, 6, 5, 7, 8, 4, 9, 2],
[5, 2, 9, 1, 3, 4, 7, 6, 8],
[4, 8, 7, 6, 2, 9, 5, 3, 1],
[2, 6, 3, 4, 1, 5, 9, 8, 7],
[9, 7, 4, 8, 6, 3, 1, 2, 5],
[8, 5, 1, 7, 9, 2, 6, 4, 3],
[1, 3, 8, 9, 4, 7, 2, 5, 6],
[6, 9, 2, 3, 5, 1, 8, 7, 4],
[7, 4, 5, 2, 8, 6, 3, 1, 9]]
empty_board = [
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]
]
def test_get_empty_cell_with_one_empty_cell():
board = copy.deepcopy(solved_board)
empty_x, empty_y = 3, 5
board[empty_y][empty_x] = 0
sudoku_solver = SudokuSolver(board)
x, y = sudoku_solver._get_unassigned_cell()
assert x == empty_x and y == empty_y
def test_get_empty_cell_no_empty_cells():
sudoku_solver = SudokuSolver(solved_board)
x, y = sudoku_solver._get_unassigned_cell() or (None, None)
assert x is None
def test_is_valid_with_valid_number():
x, y = 4, 7
number = solved_board[y][x]
board = copy.deepcopy(solved_board)
board[y][x] = 0
sudoku_solver = SudokuSolver(board)
valid = sudoku_solver._is_valid(number, x, y)
assert valid
def test_is_valid_with_invalid_number():
x, y = 4, 7
valid_number = solved_board[y][x]
random_num = valid_number
while(random_num == valid_number):
random_num = random.randint(1, 9)
invalid_number = random_num
board = copy.deepcopy(solved_board)
board[y][x] = 0
sudoku_solver = SudokuSolver(board)
valid = sudoku_solver._is_valid(invalid_number, x, y)
assert not valid
def test_is_valid_with_solved_board():
x, y = 4, 7
number = solved_board[y][x]
sudoku_solver = SudokuSolver(solved_board)
valid = sudoku_solver._is_valid(number, x, y)
assert valid
def test_is_valid_duplicate_in_row():
x, y = 4, 0
number = 4
empty_board[y][7] = number
sudoku_solver = SudokuSolver(empty_board)
valid = sudoku_solver._is_valid(number, x, y)
assert not valid
def test_is_valid_duplicate_in_column():
x, y = 4, 0
number = 4
empty_board[1][x] = number
sudoku_solver = SudokuSolver(empty_board)
valid = sudoku_solver._is_valid(number, x, y)
assert not valid
def test_is_valid_duplicate_in_subgrid():
x,y = 0,0
number = 4
empty_board[y+1][x+1] = number
sudoku_solver = SudokuSolver(empty_board)
valid = sudoku_solver._is_valid(number, x, y)
assert not valid