-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_piece.py
114 lines (74 loc) · 3.32 KB
/
test_piece.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
110
111
112
113
114
import unittest
from piece import Piece, Color, Rock, Knight, Pawn
class PieceColor(unittest.TestCase):
def test_PieceColorWhite(self):
self.p = Piece('w')
self.assertEqual(self.p.color, Color.WHITE)
def test_PieceColorBlack(self):
self.p = Piece('b')
self.assertEqual(self.p.color, Color.BLACK)
def test_InvalidPieceColor(self):
with self.assertRaises(NameError):
self.p = Piece('p')
class PieceAbsVector(unittest.TestCase):
def test_abs_vector(self):
self.assertEqual([0, 5], Piece._abs_vector([0, -5]))
self.assertEqual([0, 5], Piece._abs_vector([0, 5]))
self.assertEqual([1, 1], Piece._abs_vector([-1, -1]))
self.assertEqual([0, 0], Piece._abs_vector([0, 0]))
class PieceUnifyVector(unittest.TestCase):
def test_unify_vector_straight(self):
# single one step vectors, do not handle them
self.assertEqual([0, 0], Piece.unify_vector([0, 0]))
self.assertEqual([1, 1], Piece.unify_vector([1, 1]))
self.assertEqual([1, -1], Piece.unify_vector([1, -1]))
# allowed vector for a queen or bishop
self.assertEqual([-1, 1], Piece.unify_vector([-2, 2]))
self.assertEqual([1, 1], Piece.unify_vector([4, 4]))
# allowed vector for a knight, kind of a special case
self.assertEqual([1, -2], Piece.unify_vector([1, -2]))
self.assertEqual([1, 2], Piece.unify_vector([1, 2]))
# allowed vector for a rock, queen
self.assertEqual([0, -1], Piece.unify_vector([0, -5]))
self.assertEqual([1, 0], Piece.unify_vector([5, 0]))
class PieceRock(unittest.TestCase):
def setUp(self) -> None:
self.p = Rock('w')
def test_rock_validate_vector(self):
# unified vectors
self.assertTrue(self.p.validate_vector([0, 1]))
self.assertTrue(self.p.validate_vector([1, 0]))
self.assertTrue(self.p.validate_vector([-1, 0]))
self.assertTrue(self.p.validate_vector([0, -1]))
# valid vectors
self.assertTrue(self.p.validate_vector([0, -5]))
self.assertTrue(self.p.validate_vector([5, 0]))
# invalid directions
self.assertFalse(self.p.validate_vector([1, 1]))
self.assertFalse(self.p.validate_vector([-1, -1]))
self.assertFalse(self.p.validate_vector([1, -1]))
self.assertFalse(self.p.validate_vector([-1, 1]))
class PieceKnight(unittest.TestCase):
def setUp(self) -> None:
self.k = Knight('b')
def test_knight_color(self):
self.assertEqual(self.k.color, Color.BLACK)
def test_knight_validate_vector(self):
self.assertFalse(self.k.validate_vector([1, 4]))
self.assertFalse(self.k.validate_vector([1, 3]))
self.assertTrue(self.k.validate_vector([1, 2]))
self.assertTrue(self.k.validate_vector([2, 1]))
self.assertTrue(self.k.validate_vector([1, -2]))
class PieceCanJump(unittest.TestCase):
def test_knight_can_jump(self):
self.k = Knight('w')
self.assertTrue(self.k.can_jump())
class PieceCanNotJump(unittest.TestCase):
def test_rock_can_not_jump(self):
self.r = Rock('w')
self.assertFalse(self.r.can_jump())
def test_pawn_can_not_jump(self):
self.p = Pawn('w')
self.assertFalse(self.p.can_jump())
if __name__ == '__main__':
unittest.main()