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);
        }
Beispiel #2
0
        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");
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }