public void DynamicTreeSplittingSearchTest_7() { // ARRANGE var sourceBoardStr = new[] { "_b_b_b", "______", "___w_b", "______", "______", "______" }; var sourceBoard = new BoardMock(sourceBoardStr, 6, false); sourceBoard.SwitchPlayers(); var root = new GameNode(); root.IsMaxPlayer = false; var practiceBoard = sourceBoard.ToMinified(); _search.Search(root, 3, sbyte.MinValue, sbyte.MaxValue, practiceBoard, _cts.Token); var bestMove = root.GetBestMove(); root.Result.Should().Be(sbyte.MinValue); bestMove.Should().BeEquivalentTo(new Move(1, 0, 0, 1)); }
public void DynamicDeepeningSequentialTest_7() { // ARRANGE var sourceBoardStr = new[] { "_b_b_b", "______", "___w_b", "______", "______", "______" }; var sourceBoard = new BoardMock(sourceBoardStr, 6, false); sourceBoard.SwitchPlayers(); var root = new GameNode(); root.IsMaxPlayer = false; var practiceBoard = sourceBoard.ToMinified(); var(result, maxPly) = _wrapper.Run(practiceBoard, root, sbyte.MinValue, sbyte.MaxValue, 3, _cts.Token); var bestMove = result.Peek().Move; bestMove.From.Should().BeEquivalentTo(new Cell(1, 0)); bestMove.To.Should().BeEquivalentTo(new Cell(0, 1)); }
public void GlobalSetup() { _search1 = ServiceLocator.CreateSerialGameTreeSearch(); _search2 = ServiceLocator.CreateDynamicTreeSplittingGameTreeSearch(); _wrapper1 = ServiceLocator.CreateProgressiveDeepeningWrapper(_search1); _wrapper2 = ServiceLocator.CreateProgressiveDeepeningWrapper(_search2); var sourceBoardStr = new[] { "_b_b_b", "b_b_b_", "______", "______", "_w_w_w", "w_w_w_" }; var sourceBoard1 = new BoardMock(sourceBoardStr, 6, false); var sourceBoard2 = new BoardMock(sourceBoardStr, 6, false); _practiceBoard1 = sourceBoard1.ToMinified(); _practiceBoard2 = sourceBoard2.ToMinified(); _cts = new CancellationTokenSource(); _node1 = new GameNode(); _node2 = new GameNode(); }
protected void AssertBoardsAreEqual(BoardMock targetBoard, BoardMock sourceBoard) { targetBoard.Player1.Figures .Should() .BeEquivalentTo(sourceBoard.Player1.Figures); targetBoard.Player2.Figures .Should() .BeEquivalentTo(sourceBoard.Player2.Figures); targetBoard.ActivePlayer.Name.Should().BeEquivalentTo(sourceBoard.ActivePlayer.Name); }
public void UndoMovesTest_4() { // ARRANGE var sourceBoardStr = new[] { "__W__", "_____", "_____", "_____", "____B" }; var sourceBoard = new BoardMock(sourceBoardStr, 5, false); sourceBoard.SwitchPlayers(); var capturedPiece = new Piece(1, 1, false, false, false, true); capturedPiece.IsCaptured = true; sourceBoard.Player2.Figures.Add(capturedPiece); var targetBoardStr = new[] { "_____", "_B___", "w____", "_____", "____B" }; var targetBoard = new BoardMock(targetBoardStr, 5, false); targetBoard.Player1.Figures.First(f => f.X == 0 && f.Y == 2).AvailableMoves = new List <Cell> { new Cell(2, 0) }; var move = new HistoryItem(sourceBoard.AwaitingPlayer, new Move(0, 2, 2, 0)); move.Captured = new Piece(1, 1, false, false, true, true); move.IsPieceChangeType = true; var latestMoveBeforeUnto = new HistoryItem(sourceBoard.AwaitingPlayer, new Move(2, 4, 0, 2)); latestMoveBeforeUnto.Captured = new Piece(1, 3, false, false, true, true); // ACT _rules.Undo(sourceBoard, move, latestMoveBeforeUnto); // ASSERT AssertBoardsAreEqual(targetBoard, sourceBoard); }
public void UndoMovesTest_2() { // ARRANGE var sourceBoardStr = new[] { "___b", "w___", "____", "w___" }; var sourceBoard = new BoardMock(sourceBoardStr, 4, false); sourceBoard.SwitchPlayers(); var capturedPiece = new Piece(1, 2, false, false, false); capturedPiece.IsCaptured = true; sourceBoard.Player2.Figures.Add(capturedPiece); var targetBoardStr = new[] { "___b", "____", "_b__", "w_w_" }; var targetBoard = new BoardMock(targetBoardStr, 4, false); targetBoard.Player1.Figures.First(f => f.X == 0 && f.Y == 3).AvailableMoves = new List <Cell> { new Cell(2, 1) }; targetBoard.Player1.Figures.First(f => f.X == 2 && f.Y == 3).AvailableMoves = new List <Cell> { new Cell(0, 1) }; var move = new HistoryItem(sourceBoard.AwaitingPlayer, new Move(new Cell(2, 3), new Cell(0, 1))); move.Captured = new Piece(1, 2, false, false, true); // ACT _rules.Undo(sourceBoard, move, null); // ASSERT AssertBoardsAreEqual(targetBoard, sourceBoard); }
public void CheckersRulesTest_2() { // ARRANGE var sourceBoardStr = new[] { "_b_b", "____", "_b__", "w_w_" }; var sourceBoard = new BoardMock(sourceBoardStr, 4, false); var targetBoardStr = new[] { "_b_b", "__w_", "____", "__w_" }; var targetBoard = new BoardMock(targetBoardStr, 4, false); targetBoard.SwitchPlayers(); targetBoard.Player2.Figures.First(f => f.X == 3 && f.Y == 0).AvailableMoves = new List <Cell> { new Cell(1, 2) }; targetBoard.Player2.Figures.First(f => f.X == 1 && f.Y == 0).AvailableMoves = new List <Cell> { new Cell(3, 2) }; var capturedPiece = new Piece(1, 2, false, false, false); capturedPiece.IsCaptured = true; targetBoard.Player2.Figures.Add(capturedPiece); var move = new HistoryItem(sourceBoard.ActivePlayer, new Move(new Cell(0, 3), new Cell(2, 1))); // ACT _rules.MakeMove(sourceBoard, move); // ASSERT AssertBoardsAreEqual(sourceBoard, targetBoard); }
public void StateTransitionsTest_1() { // ARRANGE var sourceBoardStr = new[] { "____", "____", "__b_", "_w__" }; var sourceBoard = new BoardMock(sourceBoardStr, 4, false); sourceBoard.SwitchPlayers(); var targetBoardStr = new[] { "____", "____", "__b_", "_w__" }; var targetBoard = new BoardMock(targetBoardStr, 4, false); var practiceBoardSource = sourceBoard.ToMinified(); practiceBoardSource.ActivePlayer = true; var practiceBoardTarget = targetBoard.ToMinified(); var gameNode = new GameNode(); gameNode.Move = new HistoryItemMinified(new Cell(1, 3), new Cell(3, 1), true); practiceBoardSource = _stateTransitions.GoDown(practiceBoardSource, gameNode); practiceBoardSource = _stateTransitions.GoUp(practiceBoardSource, gameNode); practiceBoardSource.ClearMoves(); var pieceSource = (PieceMinified)practiceBoardSource.Player1Pieces[0]; var pieceTarget = (PieceMinified)practiceBoardTarget.Player1Pieces[0]; pieceSource.Should().BeEquivalentTo(pieceTarget); pieceSource.Should().BeEquivalentTo(pieceTarget); }
public void DynamicTreeSplittingSearchTest_1() { var sourceBoardStr = new[] { "B___", "____", "__w_", "____" }; var sourceBoard = new BoardMock(sourceBoardStr, 4, false); var root = new GameNode(); var practiceBoard = sourceBoard.ToMinified(); _search.Search(root, 2, sbyte.MinValue, sbyte.MaxValue, practiceBoard, _cts.Token); var bestMove = root.GetBestMove(); bestMove.Should().BeEquivalentTo(new Move(2, 2, 3, 1)); }
public void CheckersRulesTest_5() { // ARRANGE var sourceBoardStr = new[] { "_____", "_b___", "_____", "_b___", "__w__" }; var sourceBoard = new BoardMock(sourceBoardStr, 5, false); var targetBoardStr = new[] { "_____", "_b___", "w____", "_____", "_____" }; var targetBoard = new BoardMock(targetBoardStr, 5, false); targetBoard.Player1.Figures.First(f => f.X == 0 && f.Y == 2).AvailableMoves = new List <Cell> { new Cell(2, 0) }; var capturedPiece = new Piece(1, 3, false, false, false); capturedPiece.IsCaptured = true; targetBoard.Player2.Figures.Add(capturedPiece); var move = new HistoryItem(sourceBoard.ActivePlayer, new Move(new Cell(2, 4), new Cell(0, 2))); // ACT _rules.MakeMove(sourceBoard, move); // ASSERT AssertBoardsAreEqual(targetBoard, sourceBoard); }
public void DynamicDeepeningSequentialTest_1() { var sourceBoardStr = new[] { "B___", "____", "__w_", "____" }; var sourceBoard = new BoardMock(sourceBoardStr, 4, false); var root = new GameNode(); var practiceBoard = sourceBoard.ToMinified(); var(result, maxPly) = _wrapper.Run(practiceBoard, root, sbyte.MinValue, sbyte.MaxValue, 2, _cts.Token); var bestMove = result.Peek().Move; bestMove.From.Should().BeEquivalentTo(new Cell(2, 2)); bestMove.To.Should().BeEquivalentTo(new Cell(3, 1)); }
public void GameTreeSequentialSearch_3() { // ARRANGE var sourceBoardStr = new[] { "b_b_", "____", "____", "_w_w" }; var sourceBoard = new BoardMock(sourceBoardStr, 4, false); var root = new GameNode(); var practiceBoard = sourceBoard.ToMinified(); _search.Search(root, 12, sbyte.MinValue, sbyte.MaxValue, practiceBoard, _cts.Token); var bestMove = root.GetBestMove(); bestMove.Should().BeEquivalentTo(new Move(3, 3, 2, 2)); }
public void UndoMovesTest_1() { // ARRANGE var sourceBoardStr = new[] { "_b_b", "____", "___w", "w___" }; var sourceBoard = new BoardMock(sourceBoardStr, 4, false); sourceBoard.SwitchPlayers(); var targetBoardStr = new[] { "_b_b", "____", "____", "w_w_" }; var targetBoard = new BoardMock(targetBoardStr, 4, false); targetBoard.Player1.Figures.First(f => f.X == 0 && f.Y == 3).AvailableMoves = new List <Cell> { new Cell(1, 2) }; targetBoard.Player1.Figures.First(f => f.X == 2 && f.Y == 3).AvailableMoves = new List <Cell> { new Cell(1, 2), new Cell(3, 2) }; var move = new HistoryItem(sourceBoard.AwaitingPlayer, new Move(new Cell(2, 3), new Cell(3, 2))); // ACT _rules.Undo(sourceBoard, move, null); // ASSERT AssertBoardsAreEqual(targetBoard, sourceBoard); }
public void CheckersRulesTest_4() { // ARRANGE var sourceBoardStr = new[] { "____", "____", "_W_b", "____" }; var sourceBoard = new BoardMock(sourceBoardStr, 4, false); sourceBoard.SwitchPlayers(); var targetBoardStr = new[] { "____", "____", "_W__", "__B_" }; var targetBoard = new BoardMock(targetBoardStr, 4, false); targetBoard.Player1.Figures.First(f => f.X == 1 && f.Y == 2).AvailableMoves = new List <Cell> { new Cell(0, 3), new Cell(0, 1), new Cell(2, 1) }; var move = new HistoryItem(sourceBoard.ActivePlayer, new Move(new Cell(3, 2), new Cell(2, 3))); // ACT _rules.MakeMove(sourceBoard, move); // ASSERT AssertBoardsAreEqual(targetBoard, sourceBoard); }
public void GameTreeSequentialSearch_6() { // ARRANGE var sourceBoardStr = new[] { "______", "______", "______", "w_b___", "______", "w_w_w_" }; var sourceBoard = new BoardMock(sourceBoardStr, 6, false); var root = new GameNode(); var practiceBoard = sourceBoard.ToMinified(); _search.Search(root, 3, sbyte.MinValue, sbyte.MaxValue, practiceBoard, _cts.Token); var bestMove = root.GetBestMove(); root.Result.Should().Be(sbyte.MaxValue); bestMove.Should().BeEquivalentTo(new Move(2, 5, 3, 4)); }
public void ComputerPlayerTest_1() { var computerPlayer = new ComputerPlayer("P1", _wrapper, _treeManager); var anotherPlayer = new PlayerMock("P2"); var board1Str = new[] { "_____", "_b___", "_____", "_b___", "w____" }; var board1 = new BoardMock(board1Str, 5, false); board1.ActivePlayer.Figures .First(f => f.X == 0 && f.Y == 4) .AvailableMoves = new List <Cell> { new Cell(1, 3) }; var board2Str = new[] { "_____", "_b___", "__w__", "_____", "_____" }; var board2 = new BoardMock(board2Str, 5, false); board2.ActivePlayer.Figures .First(f => f.X == 2 && f.Y == 2) .AvailableMoves = new List <Cell> { new Cell(0, 0) }; var board3Str = new[] { "W____", "_____", "_____", "_____", "_____" }; var board3 = new BoardMock(board3Str, 5, false); board3.SwitchPlayers(); var gameMock = new GameMock( new[] { board1, board2, board3 }, new IPlayer[] { computerPlayer, computerPlayer, anotherPlayer }); var cts = new CancellationTokenSource(); computerPlayer.MakeMove(gameMock, cts.Token).Wait(); gameMock.Moves .Should() .BeEquivalentTo(new[] { new Move(0, 4, 1, 3), new Move(2, 2, 0, 0) }); }