Example #1
0
  /** 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);
  }
Example #2
0
  /** 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));
  }