public void WhenCreatedFleet_ShouldNotBeDefeated() { var cb = new TestCoordinateBoundary(4, 4); var random = new TestRandomProvider(0); var strategy = new TestShotStrategy(cb); var builder = new FleetBuilder(cb, random); var admiral = new FleetAdmiral(strategy, builder.BuildFleet(new [] { ShipSize.Destroyer })); Assert.False(admiral.IsDefeated); }
public void WhenUnableToFitAllShips_ShouldThrow() { var cb = new TestCoordinateBoundary(3, 3); var builder = new FleetBuilder(cb, random); var ships = new[] { ShipSize.Battleship }; Assert.Throws <FleetAllocationException>(() => builder.BuildFleet(ships)); }
public void WhenGivenIncorrectCoordinates_ShouldNotRecordShot() { var cb = new TestCoordinateBoundary(4, 4); var random = new TestRandomProvider(0); var strategy = new TestShotStrategy(cb); var builder = new FleetBuilder(cb, random); var admiral1 = new FleetAdmiral(strategy, builder.BuildFleet(new [] { ShipSize.Destroyer })); var admiral2 = new FleetAdmiral(strategy, builder.BuildFleet(new [] { ShipSize.Destroyer })); strategy.SetCoordinate("xx"); Assert.Throws <BattleCoordinateException>(() => admiral1.ShootAt(admiral2)); Assert.False(admiral2.Fleet.ShotsRecorded.Any()); }
public void WhenRandomlyShot_ShouldRecordRandomShot() { var cb = new TestCoordinateBoundary(4, 4); var random = new TestRandomProvider(0); var strategy = new RandomShotStrategy(cb, random); var builder = new FleetBuilder(cb, random); var admiral1 = new FleetAdmiral(strategy, builder.BuildFleet(new [] { ShipSize.Destroyer })); var admiral2 = new FleetAdmiral(strategy, builder.BuildFleet(new [] { ShipSize.Destroyer })); admiral1.ShootAt(admiral2); Assert.True(admiral2.Fleet.ShotsRecorded.Any()); Assert.True(admiral2.Fleet.ShotsRecorded.First().Key.ToString(cb) == "a1"); }
public void WhenAbleToFitAllShips_NoShipShouldOverlap(int colums, int rows, ShipSize[] ships) { var cb = new TestCoordinateBoundary(colums, rows); var builder = new FleetBuilder(cb, random); var fleet = builder.BuildFleet(ships); Assert.NotNull(fleet); Assert.True(fleet.Count() == ships.Length); var allAllocatedCoordinates = fleet.SelectMany(f => f.Coordinates).ToList(); var distinctAllocatedCoordinates = allAllocatedCoordinates.Distinct(new BattleCoordinateEqualityComparer()).ToList(); Assert.True(allAllocatedCoordinates.Count == distinctAllocatedCoordinates.Count); }
public void WhenAbleToFitAllShips_ShouldNotThrow() { var cb = new TestCoordinateBoundary(4, 4); var builder = new FleetBuilder(cb, random); var ships = new[] { ShipSize.Destroyer }; var fleet = builder.BuildFleet(ships); Assert.NotNull(fleet); Assert.True(fleet.Any()); Assert.True(fleet.First().Coordinates.Any()); Assert.True(fleet.First().Coordinates.First().ToString(cb) == "a1"); Assert.True(fleet.First().Coordinates.Last().ToString(cb) == "a4"); }
public void WhenAllShipsSunk_ShouldBeDefeated() { var cb = new TestCoordinateBoundary(4, 1); var random = new TestRandomProvider(0); var strategy = new TestShotStrategy(cb); var builder = new FleetBuilder(cb, random); var admiral1 = new FleetAdmiral(strategy, builder.BuildFleet(new [] { ShipSize.Destroyer })); var admiral2 = new FleetAdmiral(strategy, builder.BuildFleet(new [] { ShipSize.Destroyer })); strategy.SetCoordinate("a1"); admiral1.ShootAt(admiral2); strategy.SetCoordinate("b1"); admiral1.ShootAt(admiral2); strategy.SetCoordinate("c1"); admiral1.ShootAt(admiral2); strategy.SetCoordinate("d1"); admiral1.ShootAt(admiral2); Assert.True(admiral2.IsDefeated); }