-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.py
More file actions
97 lines (83 loc) · 4.06 KB
/
test.py
File metadata and controls
97 lines (83 loc) · 4.06 KB
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
import csv
import os
import pytest
from main import get_block_values, get_column_values, get_row_values, is_solved, solve
def parse_file(file_name):
with open(file_name, "r") as test_file:
dict_reader = csv.DictReader(test_file)
for row in dict_reader:
puzzle = row["PUZZLES"]
solution = row["SOLUTIONS"]
chunk_size = 9
quiz_fmt = [
list(puzzle[i: i + chunk_size]) for i in range(0, len(puzzle), chunk_size)
]
solution_fmt = [
list(solution[i: i + chunk_size])
for i in range(0, len(solution), chunk_size)
]
return quiz_fmt, solution_fmt
@pytest.mark.parametrize("quiz, solution", [parse_file(f"./test_files/{file}") for file in os.listdir("./test_files") if file.endswith(".csv")])
def test_solve(quiz, solution, benchmark):
assert benchmark(solve, quiz) == solution, (
f"Failed for quiz: {quiz} with expected solution: {solution}"
)
def test_get_column_values():
puzzle = [['2', '1', '8', '9', '5', '4', '7', '6', '3'],
['7', '6', '3', '1', '2', '8', '5', '9', '4'],
['5', '9', '4', '6', '7', '3', '2', '1', '8'],
['4', '2', '9', '5', '3', '6', '8', '7', '1'],
['3', '5', '6', '7', '8', '1', '0', '2', '9'],
['8', '7', '1', '2', '4', '9', '3', '5', '6'],
['9', '8', '2', '4', '6', '5', '1', '3', '7'],
['1', '3', '7', '8', '9', '2', '6', '4', '5'],
['6', '4', '5', '3', '1', '7', '9', '8', '2']]
idx_column_mapping = {
(0, 0): {'2', '7', '5', '4', '3', '8', '9', '1', '6'}
}
for idx, expected_col_values in idx_column_mapping.items():
column_values = get_column_values(idx, puzzle)
assert column_values == expected_col_values
def test_get_row_values():
puzzle = [['2', '1', '8', '9', '5', '4', '7', '6', '3'],
['7', '6', '3', '1', '2', '8', '5', '9', '4'],
['5', '9', '4', '6', '7', '3', '2', '1', '8'],
['4', '2', '9', '5', '3', '6', '8', '7', '1'],
['3', '5', '6', '7', '8', '1', '0', '2', '9'],
['8', '7', '1', '2', '4', '9', '3', '5', '6'],
['9', '8', '2', '4', '6', '5', '1', '3', '7'],
['1', '3', '7', '8', '9', '2', '6', '4', '5'],
['6', '4', '5', '3', '1', '7', '9', '8', '2']]
idx_column_mapping = {
(0, 0): {'2', '1', '8', '9', '5', '4', '7', '6', '3'}
}
for idx, expected_col_values in idx_column_mapping.items():
column_values = get_row_values(idx, puzzle)
assert column_values == expected_col_values
def test_get_block_values():
puzzle = [['2', '1', '8', '9', '5', '4', '7', '6', '3'],
['7', '6', '3', '1', '2', '8', '5', '9', '4'],
['5', '9', '4', '6', '7', '3', '2', '1', '8'],
['4', '2', '9', '5', '3', '6', '8', '7', '1'],
['3', '5', '6', '7', '8', '1', '0', '2', '9'],
['8', '7', '1', '2', '4', '9', '3', '5', '6'],
['9', '8', '2', '4', '6', '5', '1', '3', '7'],
['1', '3', '7', '8', '9', '2', '6', '4', '5'],
['6', '4', '5', '3', '1', '7', '9', '8', '2']]
idx_column_mapping = {
(7, 6): {'1', '3', '7', '6', '4', '5', '9', '8', '2'}
}
for idx, expected_col_values in idx_column_mapping.items():
column_values = get_block_values(idx, puzzle)
assert column_values == expected_col_values
def test_is_solved():
puzzle = [['2', '1', '8', '9', '5', '4', '7', '6', '3'],
['7', '6', '3', '1', '2', '8', '5', '9', '4'],
['5', '9', '4', '6', '7', '3', '2', '1', '8'],
['4', '2', '9', '5', '3', '6', '8', '7', '1'],
['3', '5', '6', '7', '8', '1', '0', '2', '9'],
['8', '7', '1', '2', '4', '9', '3', '5', '6'],
['9', '8', '2', '4', '6', '5', '1', '3', '7'],
['1', '3', '7', '8', '9', '2', '6', '4', '5'],
['6', '4', '5', '3', '1', '7', '9', '8', '2']]
assert not is_solved(puzzle)