Added ChessGameState, related classes and tests.
[tagua/yd.git] / tests / hlvariants / chessgamestatetest.cpp
blob08023794f65e846602084d649018edbbc40d4f92
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;
8 m_state->setup();
11 void ChessGameStateTest::tearDown() {
12 delete m_state;
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);
59 m_state->move(d5);
61 ChessMove exd6(Point(4, 3), Point(3, 2));
62 exd6.setType(ChessMove::EN_PASSANT_CAPTURE);
63 m_state->move(exd6);
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);
71 m_state->move(oo);
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);
83 m_state->move(oo);
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);
96 m_state->move(h8B);
98 CPPUNIT_ASSERT(m_state->board().get(Point(7, 0)) ==
99 ChessPiece(ChessPiece::WHITE, ChessPiece::BISHOP));