public void CalculatesNextEmpty() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬢ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬢ ⬢ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬢ ⬢ ★ ⬢ ⬢ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬢ ⬢ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬢ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedMovementBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ✔ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ✔ ⬡ ⬢ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬢ ⬢ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ✔ ⬢ ⬢ ★ ⬢ ⬢ ✔ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬢ ⬢ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ✔ ⬡ ⬢ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ✔ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var move = new OnlyJumpStraightOver(); move.Should().HaveMoves(initial, expected); }
public void DoesntIncludeAdjacent() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬢ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬢ ⬡ ★ ⬡ ⬢ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬢ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedMovementBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬢ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬢ ⬡ ★ ⬡ ⬢ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬢ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var move = new OnlyJumpStraightOver(); move.Should().HaveMoves(initial, expected); }
public async Task Player0Wins() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ b b g ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ g ⬡ S Q ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ g q S S S b ⬡ ⬡ "; initial += " ⬡ ⬡ g g G G ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; var expected = new ExpectedAiBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ b b g ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ g ✔ S Q ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ g q S S S b ⬡ ⬡ "; expected += " ⬡ ⬡ g g ★ G ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 0); var player = new ComputerPlayer(hive); (await player.GetMove()).Should().MatchHive(initial, expected); }
public async Task PiecesMoveTowardQueenUnderBeetle() { var initial = new InitialHiveBuilder(); initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ A g ⬡ ⬡ ⬡"; initial += "⬡ ⬡ Q s s B ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ G ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var beetleCell = initial.AllCells.First(c => c.Tiles.Any(t => t.Creature.Name == Creatures.Beetle.Name)); var beetle = beetleCell.RemoveTopTile(); beetleCell.AddTile(new Tile(13, 1, Creatures.Queen)); beetleCell.AddTile(beetle); var expected = new ExpectedAiBuilder(); expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ ★ g ⬡ ⬡ ⬡"; expected += "⬡ ⬡ Q s s B ✔ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ✔ G ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 0); var player = new ComputerPlayer(hive); (await player.GetMove()).Should().MatchHive(initial, expected); }
public async Task QueenMovesAway() { var initial = new InitialHiveBuilder(); initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ S ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ s s s Q ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ s s ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ q ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; var expected = new ExpectedAiBuilder(); expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ S ⬡ ✔ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ s s s ★ ✔ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ s s ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ q ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 0); var player = new ComputerPlayer(hive); (await player.GetMove()).Should().MatchHive(initial, expected); }
public async Task AntsAreScoreHighlyOncePlaced() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ A B a ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ B ⬡ Q ⬡ ⬡"; initial += "⬡ ⬡ q B B a ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedAiBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ★ B a ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ B ⬡ Q ⬡ ⬡"; expected += "⬡ ✔ q B B a ⬡ ⬡ "; expected += " ⬡ ✔ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 0); var player = new ComputerPlayer(hive); (await player.GetMove()).Should().MatchHive(initial, expected); }
public void SingleCellCanMove() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ★ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedMovementBuilder(); expected += " ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ "; expected += "✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔"; expected += " ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ "; expected += "✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔"; expected += " ✔ ✔ ✔ ✔ ★ ✔ ✔ ✔ ✔ "; expected += "✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔"; expected += " ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ "; expected += "✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔"; expected += " ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ "; new WontSplitHive().Should().HaveMoves(initial, expected); }
public async Task MovesBeetleOnTopOfQueen2() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ A ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ b ⬡ ⬡ ⬡ ⬡"; initial += "⬡ g Q b b q B ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedAiBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ A ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ b ⬡ ⬡ ⬡ ⬡"; expected += "⬡ g Q b b ✔ ★ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 0); var player = new ComputerPlayer(hive); (await player.GetMove()).Should().BeetleOnToQueen(initial, expected); }
public void DoesntAllowMovesThroughNarrowGaps() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬢ ⬢ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬢ ⬡ ⬡ ⬢ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬢ ⬡ ⬡ ⬡ ⬡ ⬢ ⬡ ⬡ "; initial += "⬡ ⬢ ⬡ ⬡ ⬢ ⬡ ⬢ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬢ ★ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬢ ⬡ ⬡ ⬢ ⬢ ⬢ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬢ ⬢ ⬡ ⬡ ⬡ ⬢ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬢ ⬢ ⬢ ⬡ ⬡ ⬡ "; var expected = new ExpectedMovementBuilder(); expected += " ⬡ ⬡ ⬡ ⬢ ⬢ ⬡ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬢ ✔ ✔ ⬢ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬢ ✔ ✔ ✔ ✔ ⬢ ⬡ ⬡ "; expected += "⬡ ⬢ ✔ ✔ ⬢ ✔ ⬢ ⬡ ⬡ ⬡"; expected += " ⬡ ✔ ✔ ⬢ ★ ✔ ⬡ ⬡ ⬡ "; expected += "⬡ ⬢ ✔ ✔ ⬢ ⬢ ⬢ ⬡ ⬡ ⬡"; expected += " ⬡ ✔ ✔ ✔ ✔ ✔ ⬡ ⬡ ⬡ "; expected += "⬡ ⬢ ⬢ ✔ ✔ ✔ ⬢ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬢ ⬢ ⬢ ⬡ ⬡ ⬡ "; new CanSlideTo().Should().HaveMoves(initial, expected); }
public void Moves3EmptyPlaces() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬢ ⬢ ⬢ ⬢ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬢ ⬡ ⬡ ⬡ ⬢ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬢ ⬡ ⬡ ⬢ ⬡ ⬡ "; initial += "⬡ ⬡ ⬢ ⬡ ⬡ ⬡ ⬡ ⬢ ⬡ ⬡"; initial += " ⬡ ⬢ ⬡ ⬡ ★ ⬢ ⬢ ⬢ ⬡ "; initial += "⬡ ⬡ ⬢ ⬢ ⬢ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬢ ⬢ ⬡ ⬡ ⬢ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬢ ⬡ ⬡ ⬢ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬢ ⬢ ⬢ ⬡ ⬡ "; var expected = new ExpectedMovementBuilder(); expected += " ⬡ ⬡ ⬡ ⬢ ⬢ ⬢ ⬢ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬢ ⬡ ⬡ ⬡ ⬢ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬢ ⬡ ✔ ⬢ ⬡ ⬡ "; expected += "⬡ ⬡ ⬢ ✔ ⬡ ⬡ ⬡ ⬢ ⬡ ⬡"; expected += " ⬡ ⬢ ⬡ ⬡ ★ ⬢ ⬢ ⬢ ⬡ "; expected += "⬡ ⬡ ⬢ ⬢ ⬢ ⬡ ⬡ ✔ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬢ ⬡ ✔ ⬢ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬢ ✔ ⬡ ⬢ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ ⬢ ⬢ ⬢ ⬡ ⬡ "; var move = new OnlyThreeSpaces(); move.Should().HaveMoves(initial, expected); }
public async Task MovesToEnemyQueen() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ A ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ g ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ q g g Q A ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedAiBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ★ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ✔ ✔ g ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ✔ q g g Q ★ ⬡ "; expected += " ⬡ ✔ ✔ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 0); var player = new ComputerPlayer(hive); (await player.GetMove()).Should().MatchHive(initial, expected); }
public void OnlyTwoOccupiedCanMove() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ★ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬢ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedMovementBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ✔ ★ ⬡ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ✔ ✔ ✔ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ✔ ✔ ⬡ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; new WontSplitHive().Should().HaveMoves(initial, expected); }
public void CantDisconnectHive2() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬢ ★ ⬢ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬢ ⬡ ⬢ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedMovementBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬢ ★ ⬢ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬢ ⬡ ⬢ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; new WontSplitHive().Should().HaveMoves(initial, expected); }
public AndConstraint <MovementAssertions> HaveMoves(InitialHiveBuilder initial, ExpectedMovementBuilder expected) { var expectedCoords = expected.ExpectedMoves(); Execute.Assertion.Given(() => Subject(initial)) .ForCondition(coords => coords.SetEquals(expectedCoords)) .FailWith("\nResulting " + Identifier + "s did not match expected\n\nInitial:\n{1}\n\nActual - Expected:\n{2}\n", _ => initial.OriginCell.Coords, _ => new StringBuilder(initial.ToColoredString(initial.ToString())), actual => new StringBuilder(expected.GetMovementDiff(actual))); return(new AndConstraint <MovementAssertions>(this)); }
public async Task NoMoves() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ A A ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ A a A ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ A A ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 0); var player = new ComputerPlayer(hive); await Assert.ThrowsAsync <ApplicationException>(async() => await player.GetMove()); }
public void CanSlideAroundEdges() { var initial = new InitialHiveBuilder(); initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬢ ⬢ ⬢ ★ ⬢ ⬢ ⬢ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; var expected = new ExpectedMovementBuilder(); expected += "✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔"; expected += " ✔ ⬢ ⬢ ⬢ ★ ⬢ ⬢ ⬢ ✔ "; expected += "✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔"; new CanSlideTo().Should().HaveMoves(initial, expected); }
public AndConstraint <AiAssertions> BeetleOnToQueen(InitialHiveBuilder initialBuilder, ExpectedAiBuilder expected) { var queenCell = initialBuilder.AllCells.Where(c => !c.IsEmpty() && c.Tiles.Any(t => t.Creature.Name == Creatures.Queen.Name)); var beetleCell = initialBuilder.AllCells.Where(c => !c.IsEmpty() && c.Tiles.Any(t => t.Creature.Name == Creatures.Beetle.Name)) .Select(c => c.TopTile()); Execute.Assertion.Given(() => Subject()) .ForCondition(result => queenCell.Any(c => c.Coords == result.Coords) && beetleCell.Any(t => t.Id == result.Tile.Id)) .FailWith( "\nResulting " + Identifier + "s did not match expected\n\nInitial:\n{1}\n\nActual - Expected:\n{2}\n", _ => initialBuilder.OriginCells.Count, _ => new StringBuilder(initialBuilder.ToColoredString(initialBuilder.ToString())), actual => new StringBuilder(expected.GetMoveDiff(new HashSet <(Coords Coords, Tile Tile)>(), actual)) ); return(new AndConstraint <AiAssertions>(this)); }
public void AllowsAllAdjacentCells() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ "; initial += "⬡ ★ ⬡"; initial += " ⬡ ⬡ "; var expected = new ExpectedMovementBuilder(); expected += " ✔ ✔ "; expected += "✔ ★ ✔"; expected += " ✔ ✔ "; var move = new IsAdjacent(); move.Should().HaveMoves(initial, expected); }
public void CreatesCellIfTheBoardIsNotLargeEnough() { var initial = new InitialHiveBuilder(); initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ★ ⬢ ⬢ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; var expected = new ExpectedMovementBuilder(); expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ★ ⬢ ⬢ ✔ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; var move = new OnlyJumpStraightOver(); move.Should().HaveMoves(initial, expected); }
public void AllowsAllEmptyCells_WithNoPlacedTiles() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ "; initial += "⬡ ★ ⬡"; initial += " ⬡ ⬡ "; var expected = new ExpectedMovementBuilder(); expected += " ✔ ✔ "; expected += "✔ ★ ✔"; expected += " ✔ ✔ "; var move = new IsEmpty(); move.Should().HaveMoves(initial, expected); }
public void HasOneHiveRule() { var initial = new InitialHiveBuilder(); initial += "⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ Q ⬡ ⬡ "; initial += "⬡ ⬡ ★ ⬡ ⬡"; initial += " ⬡ ⬡ ⬢ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡"; var expected = new ExpectedMovementBuilder(); expected += "⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ Q ⬡ ⬡ "; expected += "⬡ ⬡ ★ ⬡ ⬡"; expected += " ⬡ ⬡ ⬢ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡"; Creatures.Ant.Should().HaveMoves(initial, expected); }
public AndConstraint <AiAssertions> MatchHive(InitialHiveBuilder initialBuilder, ExpectedAiBuilder expected) { var expectedMoves = expected.ExpectedMoves(); var expectedTiles = initialBuilder.AllCells.Where(c => expected.OriginCells.Contains(c)) .Select(c => (c.Coords, Tile: c.TopTile())) .ToHashSet(); expectedTiles.UnionWith(expected.PlayerTrayMoves); Execute.Assertion.Given(() => Subject()) .ForCondition(result => expectedTiles.Any(t => t.Tile.Id == result.Tile.Id) && expectedMoves.Contains(result.Coords)) .FailWith( "\nResulting " + Identifier + "s did not match expected\n\nInitial:\n{1}\n\nActual - Expected:\n{2}\n", _ => initialBuilder.OriginCells.Count, _ => new StringBuilder(initialBuilder.ToColoredString(initialBuilder.ToString())), actual => new StringBuilder(expected.GetMoveDiff(expectedTiles, actual)) ); return(new AndConstraint <AiAssertions>(this)); }
public void HasNeighborsOccupiedRule() { var initial = new InitialHiveBuilder(); initial += "⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬢ ★ ⬡ ⬡"; initial += " ⬡ Q ⬢ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡"; var expected = new ExpectedMovementBuilder(); expected += "⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ✔ ✔ ⬡ ⬡ "; expected += "✔ ⬢ ★ ✔ ⬡"; expected += " ✔ Q ⬢ ✔ "; expected += "⬡ ✔ ✔ ✔ ⬡"; Creatures.Ant.Should().HaveMoves(initial, expected); }
public void CellWithMultipleTilesWontDisconnect() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ★ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ "; initial.OriginCells.First().AddTile(new Tile(0, 0, Creatures.Beetle)); var expected = new ExpectedMovementBuilder(); expected += " ✔ ✔ ✔ ✔ ✔ "; expected += "✔ ✔ ✔ ✔ ✔ ✔"; expected += " ✔ ✔ ★ ✔ ✔ "; expected += "✔ ✔ ✔ ✔ ✔ ✔"; expected += " ✔ ✔ ✔ ✔ ✔ "; new WontSplitHive().Should().HaveMoves(initial, expected); }
public async Task OpponentNoMoves() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ A q A ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedAiBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ✔ ⬡ ⬡ ✔ ⬡ ⬡ "; expected += " ⬡ ✔ A q A ✔ ⬡ ⬡"; expected += "⬡ ⬡ ✔ ⬡ ⬡ ✔ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var tile = new Tile(50, 0, Creatures.Ant); var player1 = new Player(0, "P1") with { Tiles = new HashSet <Tile> { tile } }; var hive = HiveFactory.CreateInProgress(new[] { player1, new Player(1, "P1") }, initial.AllCells, 0); foreach (var tileMove in hive.Players.First().Tiles) { foreach (var coords in tileMove.Moves) { initial.AddPlayerTrayOriginMove(coords); expected.PlayerTrayMoves.Add((coords, tileMove)); } } var player = new ComputerPlayer(hive); (await player.GetMove()).Should().MatchHive(initial, expected); }
public void HasNeighborsOccupiedRule() { var initial = new InitialHiveBuilder(); initial += "⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ Q ★ ⬡ ⬡"; initial += " ⬡ ⬢ ⬢ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡"; var expected = new ExpectedMovementBuilder(); expected += "⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ "; expected += "✔ Q ★ ⬡ ⬡"; expected += " ⬡ ⬢ ⬢ ⬡ "; expected += "⬡ ⬡ ⬡ ✔ ⬡"; var spider = Creatures.Spider; spider.Should().HaveMoves(initial, expected); }
public void HasThreeSpacesRuleRule() { var initial = new InitialHiveBuilder(); initial += "⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ★ ⬡ "; initial += "⬡ ⬡ Q ⬡ ⬡"; initial += " ⬡ ⬡ ⬢ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡"; var expected = new ExpectedMovementBuilder(); expected += "⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ★ ⬡ "; expected += "⬡ ⬡ Q ⬡ ⬡"; expected += " ⬡ ✔ ⬢ ⬡ "; expected += "⬡ ⬡ ⬡ ✔ ⬡"; var spider = Creatures.Spider; spider.Should().HaveMoves(initial, expected); }
public void HasNextUnoccupiedRule() { var initial = new InitialHiveBuilder(); initial += "⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ★ Q ⬢ ⬡"; initial += " ⬢ ⬢ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡"; var expected = new ExpectedMovementBuilder(); expected += "⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ "; expected += "⬡ ★ Q ⬢ ✔"; expected += " ⬢ ⬢ ⬡ ⬡ "; expected += "✔ ⬡ ✔ ⬡ ⬡"; var grasshopper = Creatures.Grasshopper; grasshopper.Should().HaveMoves(initial, expected); }
public void AllowsOnlyCellsAdjacentToOrigin() { var initial = new InitialHiveBuilder(); initial += "⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ★ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡"; var expected = new ExpectedMovementBuilder(); expected += "⬡ ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ✔ ✔ ⬡ "; expected += "⬡ ✔ ★ ✔ ⬡"; expected += " ⬡ ✔ ✔ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡"; var move = new IsAdjacent(); move.Should().HaveMoves(initial, expected); }
public void HasAtLeastOneNeighbour() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬢ ★ ⬢ ⬢ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedMovementBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ✔ ✔ ✔ ✔ ✔ ⬡ ⬡"; expected += " ⬡ ⬡ ✔ ⬢ ★ ✔ ✔ ✔ ⬡ "; expected += "⬡ ⬡ ⬡ ✔ ✔ ✔ ✔ ✔ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var move = new HasAnyNeighbour(); move.Should().HaveMoves(initial, expected); }