1 #include "chessgamestatetest.h"
2 #include "prototype/chess/gamestate.h"
4 CPPUNIT_TEST_SUITE_REGISTRATION(ChessGameStateTest
);
6 void ChessGameStateTest::setUp() {
7 m_state
= new ChessGameState
;
11 void ChessGameStateTest::tearDown() {
15 void ChessGameStateTest::test_setup() {
16 for (int i
= 0; i
< 8; i
++) {
17 CPPUNIT_ASSERT_EQUAL(ChessPiece::BLACK
,
18 m_state
->board().get(Point(i
, 0)).color());
19 CPPUNIT_ASSERT_EQUAL(ChessPiece::BLACK
,
20 m_state
->board().get(Point(i
, 1)).color());
21 CPPUNIT_ASSERT_EQUAL(ChessPiece::WHITE
,
22 m_state
->board().get(Point(i
, 6)).color());
23 CPPUNIT_ASSERT_EQUAL(ChessPiece::WHITE
,
24 m_state
->board().get(Point(i
, 7)).color());
25 CPPUNIT_ASSERT(m_state
->board().get(Point(i
, 4)) == ChessPiece());
28 CPPUNIT_ASSERT_EQUAL(ChessPiece::ROOK
,
29 m_state
->board().get(Point(0, 0)).type());
30 CPPUNIT_ASSERT_EQUAL(ChessPiece::KING
,
31 m_state
->board().get(Point(4, 7)).type());
32 CPPUNIT_ASSERT_EQUAL(ChessPiece::PAWN
,
33 m_state
->board().get(Point(6, 6)).type());
36 void ChessGameStateTest::test_simple_move() {
37 m_state
->move(ChessMove(Point(4, 6), Point(4, 5))); // e4
38 CPPUNIT_ASSERT(m_state
->board().get(Point(4, 6)) == ChessPiece());
39 CPPUNIT_ASSERT(m_state
->board().get(Point(4, 5)) ==
40 ChessPiece(ChessPiece::WHITE
, ChessPiece::PAWN
));
43 void ChessGameStateTest::test_capture() {
44 m_state
->move(ChessMove(Point(4, 6), Point(4, 4))); // e4
45 m_state
->move(ChessMove(Point(3, 1), Point(3, 3))); // d5
46 m_state
->move(ChessMove(Point(4, 4), Point(3, 3))); // exd5
48 CPPUNIT_ASSERT(m_state
->board().get(Point(3, 3)) ==
49 ChessPiece(ChessPiece::WHITE
, ChessPiece::PAWN
));
52 void ChessGameStateTest::test_en_passant() {
53 m_state
->move(ChessMove(Point(4, 6), Point(4, 4))); // e4
54 m_state
->move(ChessMove(Point(7, 1), Point(7, 2))); // h6
55 m_state
->move(ChessMove(Point(4, 4), Point(4, 3))); // e5
57 ChessMove
d5(Point(3, 1), Point(3, 3));
58 d5
.setType(ChessMove::EN_PASSANT_TRIGGER
);
61 ChessMove
exd6(Point(4, 3), Point(3, 2));
62 exd6
.setType(ChessMove::EN_PASSANT_CAPTURE
);
65 CPPUNIT_ASSERT(m_state
->board().get(Point(3, 3)) == ChessPiece());
68 void ChessGameStateTest::test_kingside_castling() {
69 ChessMove
oo(Point(4, 7), Point(6, 7));
70 oo
.setType(ChessMove::KING_SIDE_CASTLING
);
73 CPPUNIT_ASSERT(m_state
->board().get(Point(6, 7)) ==
74 ChessPiece(ChessPiece::WHITE
, ChessPiece::KING
));
75 CPPUNIT_ASSERT(m_state
->board().get(Point(5, 7)) ==
76 ChessPiece(ChessPiece::WHITE
, ChessPiece::ROOK
));
77 CPPUNIT_ASSERT(m_state
->board().get(Point(7, 7)) == ChessPiece());
80 void ChessGameStateTest::test_queenside_castling() {
81 ChessMove
oo(Point(4, 7), Point(2, 7));
82 oo
.setType(ChessMove::QUEEN_SIDE_CASTLING
);
85 CPPUNIT_ASSERT(m_state
->board().get(Point(2, 7)) ==
86 ChessPiece(ChessPiece::WHITE
, ChessPiece::KING
));
87 CPPUNIT_ASSERT(m_state
->board().get(Point(3, 7)) ==
88 ChessPiece(ChessPiece::WHITE
, ChessPiece::ROOK
));
89 CPPUNIT_ASSERT(m_state
->board().get(Point(0, 7)) == ChessPiece());
92 void ChessGameStateTest::test_promotion() {
93 m_state
->board().set(Point(7, 1), ChessPiece(ChessPiece::WHITE
, ChessPiece::PAWN
));
94 ChessMove
h8B(Point(7, 1), Point(7, 0), ChessPiece::BISHOP
);
95 h8B
.setType(ChessMove::PROMOTION
);
98 CPPUNIT_ASSERT(m_state
->board().get(Point(7, 0)) ==
99 ChessPiece(ChessPiece::WHITE
, ChessPiece::BISHOP
));