diff --git a/app/src/main/java/chess/model/ChessBoard.java b/app/src/main/java/chess/model/ChessBoard.java index 283bd2d..7630c73 100644 --- a/app/src/main/java/chess/model/ChessBoard.java +++ b/app/src/main/java/chess/model/ChessBoard.java @@ -301,4 +301,11 @@ public class ChessBoard { this.lastMove = lastMove; } + @Override + public boolean equals(Object otherBoard){ + if (!(otherBoard instanceof ChessBoard)) return false; + return ((hashPlayerPieces(Color.White) == ((ChessBoard)otherBoard).hashPlayerPieces(Color.White)) + && (hashPlayerPieces(Color.Black) == ((ChessBoard)otherBoard).hashPlayerPieces(Color.Black))); + } + } diff --git a/app/src/main/java/chess/model/Piece.java b/app/src/main/java/chess/model/Piece.java index f0d9efe..041b25b 100644 --- a/app/src/main/java/chess/model/Piece.java +++ b/app/src/main/java/chess/model/Piece.java @@ -28,4 +28,7 @@ public abstract class Piece { public abstract T accept(PieceVisitor visitor); + @Override + public abstract boolean equals(Object other); + } diff --git a/app/src/main/java/chess/model/pieces/Bishop.java b/app/src/main/java/chess/model/pieces/Bishop.java index 4556963..e6eb5a8 100644 --- a/app/src/main/java/chess/model/pieces/Bishop.java +++ b/app/src/main/java/chess/model/pieces/Bishop.java @@ -20,4 +20,9 @@ public class Bishop extends Piece { return 0; } + @Override + public boolean equals(Piece obj) { + return (obj instanceof Bishop && ((Bishop) obj).getColor() == this.getColor()); + } + } diff --git a/app/src/main/java/chess/model/pieces/King.java b/app/src/main/java/chess/model/pieces/King.java index 36a592d..65380d0 100644 --- a/app/src/main/java/chess/model/pieces/King.java +++ b/app/src/main/java/chess/model/pieces/King.java @@ -19,4 +19,9 @@ public class King extends Piece { public int hashCode() { return 1; } + + @Override + public boolean equals(Piece obj) { + return (obj instanceof King && ((King) obj).getColor() == this.getColor()); + } } diff --git a/app/src/main/java/chess/model/pieces/Knight.java b/app/src/main/java/chess/model/pieces/Knight.java index 7f26558..eeea15c 100644 --- a/app/src/main/java/chess/model/pieces/Knight.java +++ b/app/src/main/java/chess/model/pieces/Knight.java @@ -19,4 +19,9 @@ public class Knight extends Piece { public int hashCode() { return 2; } + + @Override + public boolean equals(Piece obj) { + return (obj instanceof Knight && ((Knight) obj).getColor() == this.getColor()); + } } diff --git a/app/src/main/java/chess/model/pieces/Pawn.java b/app/src/main/java/chess/model/pieces/Pawn.java index efc2815..998d591 100644 --- a/app/src/main/java/chess/model/pieces/Pawn.java +++ b/app/src/main/java/chess/model/pieces/Pawn.java @@ -23,4 +23,9 @@ public class Pawn extends Piece { public int hashCode() { return 3; } + + @Override + public boolean equals(Piece obj) { + return (obj instanceof Pawn && ((Pawn) obj).getColor() == this.getColor()); + } } diff --git a/app/src/main/java/chess/model/pieces/Queen.java b/app/src/main/java/chess/model/pieces/Queen.java index bd994bb..87e377a 100644 --- a/app/src/main/java/chess/model/pieces/Queen.java +++ b/app/src/main/java/chess/model/pieces/Queen.java @@ -19,4 +19,9 @@ public class Queen extends Piece { public int hashCode() { return 4; } + + @Override + public boolean equals(Piece obj) { + return (obj instanceof Queen && ((Queen) obj).getColor() == this.getColor()); + } } diff --git a/app/src/main/java/chess/model/pieces/Rook.java b/app/src/main/java/chess/model/pieces/Rook.java index 5c7e14d..fb0fcc6 100644 --- a/app/src/main/java/chess/model/pieces/Rook.java +++ b/app/src/main/java/chess/model/pieces/Rook.java @@ -19,4 +19,9 @@ public class Rook extends Piece { public int hashCode() { return 5; } + + @Override + public boolean equals(Piece obj) { + return (obj instanceof Rook && ((Rook) obj).getColor() == this.getColor()); + } } diff --git a/app/src/test/java/chess/AppTest.java b/app/src/test/java/chess/AppTest.java index 56c64dc..c82e541 100644 --- a/app/src/test/java/chess/AppTest.java +++ b/app/src/test/java/chess/AppTest.java @@ -3,12 +3,57 @@ */ package chess; +import chess.ai.DumbAI; +import chess.controller.Command; +import chess.controller.CommandExecutor; +import chess.controller.commands.NewGameCommand; +import chess.controller.commands.UndoCommand; +import chess.controller.event.GameAdaptator; +import chess.model.*; +import chess.model.pieces.*; +import chess.simulator.Simulator; +import chess.view.simplerender.Window; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Objects; class AppTest { - @Test void appHasAGreeting() { - // App classUnderTest = new App(); - // assertNotNull(classUnderTest.getGreeting(), "app should have a greeting"); + @Test void functionalRollback(){ + Game game = new Game(new ChessBoard()); + CommandExecutor commandExecutor = new CommandExecutor(game); + + DumbAI ai = new DumbAI(commandExecutor, Color.Black); + commandExecutor.addListener(ai); + + DumbAI ai2 = new DumbAI(commandExecutor, Color.White); + commandExecutor.addListener(ai2); + + commandExecutor.addListener(new GameAdaptator() { + @Override + public void onGameEnd() { + + Command.CommandResult result; + do { + result = commandExecutor.executeCommand(new UndoCommand()); + } while (result != Command.CommandResult.NotAllowed); + + Game initialGame = new Game(new ChessBoard()); + CommandExecutor initialCommandExecutor = new CommandExecutor(initialGame); + commandExecutor.executeCommand(new NewGameCommand()); + + assert(game.getBoard().equals(initialGame.getBoard())); + + } + }); + + commandExecutor.executeCommand(new NewGameCommand()); + + } + + @Test void functionalRollbacks(){ + for (int i=0; i<100; i++) { + functionalRollback(); + } } }