|
1 | 1 | import unittest
|
2 | 2 |
|
3 |
| -from queen_attack import board, can_attack |
| 3 | +from queen_attack import Queen |
4 | 4 |
|
5 | 5 |
|
6 |
| -# Tests adapted from `problem-specifications//canonical-data.json` @ v2.0.0 |
| 6 | +# Tests adapted from `problem-specifications//canonical-data.json` @ v2.1.0 |
7 | 7 |
|
8 | 8 | class QueenAttackTest(unittest.TestCase):
|
9 | 9 |
|
| 10 | + # Test creation of Queens with valid and invalid positions |
10 | 11 | def test_queen_valid_position(self):
|
11 | 12 | try:
|
12 |
| - board((1, 1), (2, 2)) |
| 13 | + Queen(2, 2) |
13 | 14 | except ValueError:
|
14 | 15 | self.fail("Unexpected Exception")
|
15 | 16 |
|
16 | 17 | def test_queen_negative_row(self):
|
17 | 18 | with self.assertRaisesWithMessage(ValueError):
|
18 |
| - board((1, 1), (-2, 2)) |
| 19 | + Queen(-2, 2) |
19 | 20 |
|
20 | 21 | def test_queen_invalid_row(self):
|
21 | 22 | with self.assertRaisesWithMessage(ValueError):
|
22 |
| - board((1, 1), (8, 4)) |
| 23 | + Queen(8, 4) |
23 | 24 |
|
24 | 25 | def test_queen_negative_column(self):
|
25 | 26 | with self.assertRaisesWithMessage(ValueError):
|
26 |
| - board((1, 1), (2, -2)) |
| 27 | + Queen(2, -2) |
27 | 28 |
|
28 | 29 | def test_queen_invalid_column(self):
|
29 | 30 | with self.assertRaisesWithMessage(ValueError):
|
30 |
| - board((1, 1), (4, 8)) |
| 31 | + Queen(4, 8) |
31 | 32 |
|
| 33 | + # Test the ability of one queen to attack another |
32 | 34 | def test_attack_false(self):
|
33 |
| - self.assertIs(can_attack((2, 4), (6, 6)), False) |
| 35 | + self.assertIs(Queen(2, 4).can_attack(Queen(6, 6)), False) |
34 | 36 |
|
35 | 37 | def test_attack_same_row(self):
|
36 |
| - self.assertIs(can_attack((2, 4), (2, 6)), True) |
| 38 | + self.assertIs(Queen(2, 4).can_attack(Queen(2, 6)), True) |
37 | 39 |
|
38 | 40 | def test_attack_same_column(self):
|
39 |
| - self.assertIs(can_attack((4, 5), (2, 5)), True) |
| 41 | + self.assertIs(Queen(4, 5).can_attack(Queen(2, 5)), True) |
40 | 42 |
|
41 | 43 | def test_attack_diagonal1(self):
|
42 |
| - self.assertIs(can_attack((2, 2), (0, 4)), True) |
| 44 | + self.assertIs(Queen(2, 2).can_attack(Queen(0, 4)), True) |
43 | 45 |
|
44 | 46 | def test_attack_diagonal2(self):
|
45 |
| - self.assertIs(can_attack((2, 2), (3, 1)), True) |
| 47 | + self.assertIs(Queen(2, 2).can_attack(Queen(3, 1)), True) |
46 | 48 |
|
47 | 49 | def test_attack_diagonal3(self):
|
48 |
| - self.assertIs(can_attack((2, 2), (1, 1)), True) |
| 50 | + self.assertIs(Queen(2, 2).can_attack(Queen(1, 1)), True) |
49 | 51 |
|
50 | 52 | def test_attack_diagonal4(self):
|
51 |
| - self.assertIs(can_attack((2, 2), (5, 5)), True) |
52 |
| - |
53 |
| - # Tests beyond this point are not part of the canonical data. |
54 |
| - |
55 |
| - # If either board or can_attack are called with an invalid board position |
56 |
| - # they should raise a ValueError with a meaningful error message. |
57 |
| - def test_invalid_position_can_attack(self): |
58 |
| - with self.assertRaisesWithMessage(ValueError): |
59 |
| - can_attack((0, 0), (7, 8)) |
60 |
| - |
61 |
| - def test_queens_same_position_board(self): |
62 |
| - with self.assertRaisesWithMessage(ValueError): |
63 |
| - board((2, 2), (2, 2)) |
| 53 | + self.assertIs(Queen(2, 2).can_attack(Queen(5, 5)), True) |
64 | 54 |
|
| 55 | + # Track-specific tests |
65 | 56 | def test_queens_same_position_can_attack(self):
|
66 | 57 | with self.assertRaisesWithMessage(ValueError):
|
67 |
| - can_attack((2, 2), (2, 2)) |
68 |
| - |
69 |
| - def test_board1(self): |
70 |
| - ans = ['________', |
71 |
| - '________', |
72 |
| - '___W____', |
73 |
| - '________', |
74 |
| - '________', |
75 |
| - '______B_', |
76 |
| - '________', |
77 |
| - '________'] |
78 |
| - self.assertEqual(board((2, 3), (5, 6)), ans) |
79 |
| - |
80 |
| - def test_board2(self): |
81 |
| - ans = ['______W_', |
82 |
| - '_______B', |
83 |
| - '________', |
84 |
| - '________', |
85 |
| - '________', |
86 |
| - '________', |
87 |
| - '________', |
88 |
| - '________'] |
89 |
| - self.assertEqual(board((0, 6), (1, 7)), ans) |
| 58 | + Queen(2, 2).can_attack(Queen(2, 2)) |
90 | 59 |
|
91 | 60 | # Utility functions
|
92 | 61 | def setUp(self):
|
|
0 commit comments