refactor: NCS-8 removed Context and replaced it with History #6
@@ -6,7 +6,7 @@ import de.nowchess.api.board.Square
|
|||||||
case class HistoryMove(
|
case class HistoryMove(
|
||||||
from: Square,
|
from: Square,
|
||||||
to: Square,
|
to: Square,
|
||||||
castleSide: Option[CastleSide] = None
|
castleSide: Option[CastleSide]
|
||||||
)
|
)
|
||||||
|
|
||||||
/** Complete game history: ordered list of moves. */
|
/** Complete game history: ordered list of moves. */
|
||||||
@@ -14,7 +14,10 @@ case class GameHistory(moves: List[HistoryMove] = List.empty):
|
|||||||
def addMove(move: HistoryMove): GameHistory =
|
def addMove(move: HistoryMove): GameHistory =
|
||||||
GameHistory(moves :+ move)
|
GameHistory(moves :+ move)
|
||||||
|
|
||||||
def addMove(from: Square, to: Square, castleSide: Option[CastleSide] = None): GameHistory =
|
def addMove(from: Square, to: Square): GameHistory =
|
||||||
|
addMove(HistoryMove(from, to, None))
|
||||||
|
|
||||||
|
def addMove(from: Square, to: Square, castleSide: Option[CastleSide]): GameHistory =
|
||||||
addMove(HistoryMove(from, to, castleSide))
|
addMove(HistoryMove(from, to, castleSide))
|
||||||
|
|
||||||
object GameHistory:
|
object GameHistory:
|
||||||
|
|||||||
@@ -135,3 +135,27 @@ class GameRulesTest extends AnyFunSuite with Matchers:
|
|||||||
result.pieceAt(sq(File.D, Rank.R1)) shouldBe Some(Piece.WhiteRook)
|
result.pieceAt(sq(File.D, Rank.R1)) shouldBe Some(Piece.WhiteRook)
|
||||||
result.pieceAt(sq(File.E, Rank.R1)) shouldBe None
|
result.pieceAt(sq(File.E, Rank.R1)) shouldBe None
|
||||||
result.pieceAt(sq(File.A, Rank.R1)) shouldBe None
|
result.pieceAt(sq(File.A, Rank.R1)) shouldBe None
|
||||||
|
|
||||||
|
test("CastleSide.withCastle correctly positions pieces for Black Kingside castling"):
|
||||||
|
val b = board(
|
||||||
|
sq(File.E, Rank.R8) -> Piece.BlackKing,
|
||||||
|
sq(File.H, Rank.R8) -> Piece.BlackRook,
|
||||||
|
sq(File.A, Rank.R1) -> Piece.WhiteKing
|
||||||
|
)
|
||||||
|
val result = b.withCastle(Color.Black, CastleSide.Kingside)
|
||||||
|
result.pieceAt(sq(File.G, Rank.R8)) shouldBe Some(Piece.BlackKing)
|
||||||
|
result.pieceAt(sq(File.F, Rank.R8)) shouldBe Some(Piece.BlackRook)
|
||||||
|
result.pieceAt(sq(File.E, Rank.R8)) shouldBe None
|
||||||
|
result.pieceAt(sq(File.H, Rank.R8)) shouldBe None
|
||||||
|
|
||||||
|
test("CastleSide.withCastle correctly positions pieces for Black Queenside castling"):
|
||||||
|
val b = board(
|
||||||
|
sq(File.E, Rank.R8) -> Piece.BlackKing,
|
||||||
|
sq(File.A, Rank.R8) -> Piece.BlackRook,
|
||||||
|
sq(File.A, Rank.R1) -> Piece.WhiteKing
|
||||||
|
)
|
||||||
|
val result = b.withCastle(Color.Black, CastleSide.Queenside)
|
||||||
|
result.pieceAt(sq(File.C, Rank.R8)) shouldBe Some(Piece.BlackKing)
|
||||||
|
result.pieceAt(sq(File.D, Rank.R8)) shouldBe Some(Piece.BlackRook)
|
||||||
|
result.pieceAt(sq(File.E, Rank.R8)) shouldBe None
|
||||||
|
result.pieceAt(sq(File.A, Rank.R8)) shouldBe None
|
||||||
|
|||||||
Reference in New Issue
Block a user