def test_normal_move(self): board = Board(False) board.load_fen("8/8/8/8/8/8/8/4K3 w kQkq - 0 1") self.assertEqual(board.at((4, 0)), WK) self.assertEqual(True, bool(board.move((4, 0), (4, 1), 5))) self.assertEqual(board.at((4, 0)), None) self.assertEqual(board.at((4, 1)), WK)
def test_promotion_move(self): board = Board(False) board.load_fen("8/4P3/8/8/8/8/8/8 w kQkq - 0 1") self.assertEqual(board.at((4, 6)), WP) self.assertEqual(True, bool(board.move((4, 6), (4, 7), 5))) # ToDo: verificar. Vai ser sempre rainha? self.assertEqual(board.at((4, 7)), WQ) self.assertEqual(board.at((4, 6)), None)
def test_left_en_passant_move(self): board = Board(False) board.load_fen("8/3p4/8/4P3/8/8/8/8 b kQkq - 0 1") self.assertEqual(True, bool(board.move((3, 6), (3, 4), 5))) self.assertEqual(board.at((4, 4)), WP) self.assertEqual(board.at((3, 4)), BP) self.assertEqual(True, bool(board.move((4, 4), (3, 5), 5))) self.assertEqual(board.at((4, 4)), None) self.assertEqual(board.at((3, 5)), WP) self.assertEqual(board.at((3, 4)), None)
def test_kingside_castling_move(self): board = Board(False) board.load_fen("4k2r/8/8/8/8/8/8/8 b kQkq - 0 1") self.assertEqual(board.at((4, 7)), BK) self.assertEqual(board.at((7, 7)), BR) self.assertEqual(True, bool(board.move((4, 7), (6, 7), 5))) self.assertEqual(board.at((4, 7)), None) self.assertEqual(board.at((7, 7)), None) self.assertEqual(board.at((6, 7)), BK) self.assertEqual(board.at((5, 7)), BR)
def test_queenside_castling_move(self): board = Board(False) board.load_fen("8/8/8/8/8/8/8/R3K3 w kQkq - 0 1") self.assertEqual(board.at((4, 0)), WK) self.assertEqual(board.at((0, 0)), WR) self.assertEqual(True, bool(board.move((4, 0), (2, 0), 5))) self.assertEqual(board.at((4, 0)), None) self.assertEqual(board.at((0, 0)), None) self.assertEqual(board.at((2, 0)), WK) self.assertEqual(board.at((3, 0)), WR)
def test_create_board_new_game_true(self): board = Board(True) # Pawn for x in xrange(8): self.assertEqual(board.at((x, 6)), BP) self.assertEqual(board.at((x, 1)), WP) # Rook self.assertEqual(board.at((0, 0)), WR) self.assertEqual(board.at((7, 0)), WR) self.assertEqual(board.at((0, 7)), BR) self.assertEqual(board.at((7, 7)), BR) # Knight self.assertEqual(board.at((1, 0)), WN) self.assertEqual(board.at((6, 0)), WN) self.assertEqual(board.at((1, 7)), BN) self.assertEqual(board.at((6, 7)), BN) # Bishop self.assertEqual(board.at((2, 0)), WB) self.assertEqual(board.at((5, 0)), WB) self.assertEqual(board.at((2, 7)), BB) self.assertEqual(board.at((5, 7)), BB) # Queen self.assertEqual(board.at((3, 0)), WQ) self.assertEqual(board.at((3, 7)), BQ) # King self.assertEqual(board.at((4, 0)), WK) self.assertEqual(board.at((4, 7)), BK)
def test_black_pawn_at_e2_with_enemy_at_f1_should_be_promoted_at_f1(self): board = Board(False) board.load_fen("8/8/8/8/8/8/4p3/5P2 b kQkq f3 0 1") pos = (4, 1) possible_moves = moves(pos, [(4, 0), (5, 0)]) self.assertEqual(tuples(board.piece_moves(pos)), possible_moves) board.move((4, 1), (5, 0), 5) self.assertEqual(board.at((5, 0)), "black queen")
def test_white_pawn_at_e7_with_enemy_at_f8_should_be_promoted_at_f8(self): board = Board(False) board.load_fen("5p2/4P3/8/8/8/8/8/8 w kQkq f3 0 1") pos = (4, 6) possible_moves = moves(pos, [(4, 7), (5, 7)]) self.assertEqual(tuples(board.piece_moves(pos)), possible_moves) board.move((4, 6), (5, 7), 5) self.assertEqual(board.at((5, 7)), "white queen")
def test_create_board_new_game_false(self): board = Board(False) for x in xrange(8): for y in xrange(8): self.assertEqual(board.at((x, y)), None)
def test_checkmate(self): board = Board(False) board.load_fen("4k3/8/8/5R2/8/8/8/3R1R2 w kQkq - 0 1") self.assertEqual(True, bool(board.move((5, 4), (4, 4), 5))) self.assertEqual(board.at((5, 4)), None) self.assertEqual(board.at((4, 4)), WR)
def test_invalid_keep_check(self): board = Board(False) board.load_fen("8/4P3/8/8/8/8/4P3/r3Kr2 w kQkq - 0 1") self.assertEqual(False, board.move((4, 0), (5, 0), 5)) self.assertEqual(board.at((4, 0)), WK) self.assertEqual(board.at((5, 0)), BR)
def test_get_from_invalid_position_returns_none(self): board = Board(False) self.assertEqual(board.at((-4, 4)), None)
def test_get_from_valid_position_with_piece_returns_piece(self): board = Board(False) board.load_fen("8/8/8/4N3/8/8/8/8 w kQkq - 0 1") self.assertEqual(board.at((4, 4)), WN)
def test_get_from_valid_position_without_piece_returns_none(self): board = Board(False) self.assertEqual(board.at((4, 4)), None)