/** Test of makeMove method, of class Position. */ public void testPromotion() throws ChessParseError { String fen = "r1bqk2r/1Pppbppp/p1n2n2/2P1p3/B3P3/5N2/Pp1P1PPP/R1BQK2R w KQkq - 0 1"; Position pos = TextIO.readFEN(fen); assertEquals(fen, TextIO.toFEN(pos)); Position origPos = new Position(pos); assertEquals(origPos, pos); Move move = new Move(Position.getSquare(1, 6), Position.getSquare(0, 7), Piece.WQUEEN); UndoInfo ui = new UndoInfo(); pos.makeMove(move, ui); assertEquals(Piece.EMPTY, pos.getPiece(Position.getSquare(1, 6))); assertEquals(Piece.WQUEEN, pos.getPiece(Position.getSquare(0, 7))); pos.unMakeMove(move, ui); assertEquals(origPos, pos); move = new Move(Position.getSquare(1, 6), Position.getSquare(1, 7), Piece.WKNIGHT); ui = new UndoInfo(); pos.makeMove(move, ui); assertEquals(Piece.EMPTY, pos.getPiece(Position.getSquare(1, 6))); assertEquals(Piece.WKNIGHT, pos.getPiece(Position.getSquare(1, 7))); pos.unMakeMove(move, ui); assertEquals(origPos, pos); pos.setWhiteMove(false); origPos = new Position(pos); move = new Move(Position.getSquare(1, 1), Position.getSquare(2, 0), Piece.BROOK); ui = new UndoInfo(); pos.makeMove(move, ui); assertEquals(Piece.EMPTY, pos.getPiece(Position.getSquare(1, 1))); assertEquals(Piece.BROOK, pos.getPiece(Position.getSquare(2, 0))); pos.unMakeMove(move, ui); assertEquals(origPos, pos); }
/** Test of makeMove method, of class Position. */ public void testMakeMove() throws ChessParseError { Position pos = TextIO.readFEN(TextIO.startPosFEN); Position origPos = new Position(pos); assertTrue(pos.equals(origPos)); Move move = new Move(Position.getSquare(4, 1), Position.getSquare(4, 3), Piece.EMPTY); UndoInfo ui = new UndoInfo(); pos.makeMove(move, ui); assertEquals(pos.whiteMove, false); assertEquals(-1, pos.getEpSquare()); assertEquals(Piece.EMPTY, pos.getPiece(Position.getSquare(4, 1))); assertEquals(Piece.WPAWN, pos.getPiece(Position.getSquare(4, 3))); assertTrue(!pos.equals(origPos)); int castleMask = (1 << Position.A1_CASTLE) | (1 << Position.H1_CASTLE) | (1 << Position.A8_CASTLE) | (1 << Position.H8_CASTLE); assertEquals(castleMask, pos.getCastleMask()); pos.unMakeMove(move, ui); assertEquals(pos.whiteMove, true); assertEquals(Piece.WPAWN, pos.getPiece(Position.getSquare(4, 1))); assertEquals(Piece.EMPTY, pos.getPiece(Position.getSquare(4, 3))); assertTrue(pos.equals(origPos)); String fen = "r1bqk2r/2ppbppp/p1n2n2/1pP1p3/B3P3/5N2/PP1P1PPP/RNBQK2R w KQkq b6 0 2"; pos = TextIO.readFEN(fen); assertEquals(fen, TextIO.toFEN(pos)); origPos = new Position(pos); assertEquals(Position.getSquare(1, 5), pos.getEpSquare()); // Test capture move = new Move(Position.getSquare(0, 3), Position.getSquare(1, 4), Piece.EMPTY); pos.makeMove(move, ui); assertEquals(-1, pos.getEpSquare()); assertEquals(Piece.WBISHOP, pos.getPiece(Position.getSquare(1, 4))); assertEquals(Piece.EMPTY, pos.getPiece(Position.getSquare(0, 3))); pos.unMakeMove(move, ui); assertTrue(pos.equals(origPos)); // Test castling move = new Move(Position.getSquare(4, 0), Position.getSquare(6, 0), Piece.EMPTY); pos.makeMove(move, ui); assertEquals(Piece.WROOK, pos.getPiece(Position.getSquare(5, 0))); assertEquals(Piece.EMPTY, pos.getPiece(Position.getSquare(7, 0))); castleMask = (1 << Position.A8_CASTLE) | (1 << Position.H8_CASTLE); assertEquals(castleMask, pos.getCastleMask()); assertEquals(-1, pos.getEpSquare()); pos.unMakeMove(move, ui); assertTrue(pos.equals(origPos)); // Test castling rights (king move) move = new Move(Position.getSquare(4, 0), Position.getSquare(4, 1), Piece.EMPTY); pos.makeMove(move, ui); castleMask = (1 << Position.A8_CASTLE) | (1 << Position.H8_CASTLE); assertEquals(castleMask, pos.getCastleMask()); assertEquals(-1, pos.getEpSquare()); pos.unMakeMove(move, ui); assertTrue(pos.equals(origPos)); // Test castling rights (rook move) move = new Move(Position.getSquare(7, 0), Position.getSquare(6, 0), Piece.EMPTY); pos.makeMove(move, ui); castleMask = (1 << Position.A1_CASTLE) | (1 << Position.A8_CASTLE) | (1 << Position.H8_CASTLE); assertEquals(castleMask, pos.getCastleMask()); assertEquals(-1, pos.getEpSquare()); pos.unMakeMove(move, ui); assertTrue(pos.equals(origPos)); // Test en passant move = new Move(Position.getSquare(2, 4), Position.getSquare(1, 5), Piece.EMPTY); pos.makeMove(move, ui); assertEquals(Piece.WPAWN, pos.getPiece(Position.getSquare(1, 5))); assertEquals(Piece.EMPTY, pos.getPiece(Position.getSquare(2, 4))); assertEquals(Piece.EMPTY, pos.getPiece(Position.getSquare(1, 4))); pos.unMakeMove(move, ui); assertTrue(pos.equals(origPos)); // Test castling rights loss when rook captured pos.setPiece(Position.getSquare(6, 2), Piece.BKNIGHT); pos.setWhiteMove(false); Position origPos2 = new Position(pos); move = new Move(Position.getSquare(6, 2), Position.getSquare(7, 0), Piece.EMPTY); pos.makeMove(move, ui); castleMask = (1 << Position.A1_CASTLE) | (1 << Position.A8_CASTLE) | (1 << Position.H8_CASTLE); assertEquals(castleMask, pos.getCastleMask()); assertEquals(-1, pos.getEpSquare()); pos.unMakeMove(move, ui); assertTrue(pos.equals(origPos2)); }