forked from exercism/python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconnect_test.py
More file actions
118 lines (110 loc) · 2.99 KB
/
connect_test.py
File metadata and controls
118 lines (110 loc) · 2.99 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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import unittest
import connect
# Tests adapted from `problem-specifications//canonical-data.json` @ v1.1.0
testcases = [
{
"description": "an empty board has no winner",
"board":
""" . . . . .
. . . . .
. . . . .
. . . . .
. . . . .""",
"winner": ""
},
{
"description": "O can win on a 1x1 board",
"board": "O",
"winner": "O"
},
{
"description": "X can win on a 1x1 board",
"board": "X",
"winner": "X"
},
{
"description": "only edges does not make a winner",
"board":
""" O O O X
X . . X
X . . X
X O O O""",
"winner": ""
},
{
"description": "illegal diagonal does not make a winner",
"board":
""" X O . .
O X X X
O X O .
. O X .
X X O O""",
"winner": ""
},
{
"description": "nobody wins crossing adjacent angles",
"board":
""" X . . .
. X O .
O . X O
. O . X
. . O .""",
"winner": ""
},
{
"description": "X wins crossing from left to right",
"board":
""" . O . .
O X X X
O X O .
X X O X
. O X .""",
"winner": "X"
},
{
"description": "X wins using a convoluted path",
"board":
""" . X X . .
X . X . X
. X . X .
. X X . .
O O O O O""",
"winner": "X"
},
{
"description": "O wins crossing from top to bottom",
"board":
""" . O . .
O X X X
O O O .
X X O X
. O X .""",
"winner": "O"
},
{
"description": "X wins using a spiral path",
"board":
""" O X X X X X X X X
O X O O O O O O O
O X O X X X X X O
O X O X O O O X O
O X O X X X O X O
O X O O O X O X O
O X X X X X O X O
O O O O O O O X O
X X X X X X X X O """,
"winner": "X"
},
]
class ConnectTest(unittest.TestCase):
def test_game(self):
for testcase in testcases:
game = connect.ConnectGame(testcase["board"])
winner = game.get_winner()
expected = testcase["winner"] if testcase["winner"] else "None"
got = winner if winner else "None"
self.assertEqual(winner, testcase["winner"],
"Test failed: %s, expected winner: %s, got: %s"
% (testcase["description"], expected, got))
if __name__ == '__main__':
unittest.main()