                 board.swap((oldRookFile, rank), (newRookFile, rank))
                 execute()
             } else {
-                fallthrough
+                execute(board.removePieceAt(move.end))
             }
         case .Rook:
             switch move.start {

                board[move.end] = promotion ?? .Queen(color)
                _moveHistory.append((move, piece, capture))
            } else {
                fallthrough
            }
        case .King:
            if piece.color.isWhite {
                whiteKingHasMoved = true
            } else {
                blackKingHasMoved = true

            default:
                break
            }
            execute(board.removePieceAt(move.end))
        default:
            execute(board.removePieceAt(move.end))
        }
