Example #1
0
        public void NotEnoughSpaceForPlanetsCausesException(int size, int planets, int minDistance)
        {
            var generator = new GalaxyGenerator();

            var settings = new GalaxyGeneratorSettings()
            {
                GalaxySize  = size,
                PlanetCount = planets,
                MinimumDistanceBetweenPlanets = minDistance,
            };

            Assert.Throws <OutOfSpaceException>(() => generator.Generate(settings));
        }
Example #2
0
        public void EachPlanetHasADistinctPosition()
        {
            var generator = new GalaxyGenerator();

            var settings = new GalaxyGeneratorSettings()
            {
                GalaxySize  = 800,
                PlanetCount = 100,
            };

            var galaxy = generator.Generate(settings);

            Assert.Equal(galaxy.Planets.Count, galaxy.Planets.Select(planet => planet.Position).Distinct().Count());
        }
Example #3
0
        public void GalaxyHasCorrectSize(int size)
        {
            var generator = new GalaxyGenerator();

            var settings = new GalaxyGeneratorSettings()
            {
                GalaxySize  = size,
                PlanetCount = 0,
            };

            var galaxy = generator.Generate(settings);

            Assert.Equal(size, galaxy.Bounds.Size);
        }
Example #4
0
        public void GalaxyHasCorrectNumberOfPlanets(int planets)
        {
            var generator = new GalaxyGenerator();

            var settings = new GalaxyGeneratorSettings()
            {
                GalaxySize  = 1000,
                PlanetCount = planets,
            };

            var galaxy = generator.Generate(settings);

            Assert.Equal(planets, galaxy.Planets.Count);
        }
Example #5
0
        public void MinDistanceBetweenPlanetsIsValid(int size, int planets, int minDistance)
        {
            var generator = new GalaxyGenerator();

            var settings = new GalaxyGeneratorSettings()
            {
                GalaxySize  = size,
                PlanetCount = planets,
                MinimumDistanceBetweenPlanets = minDistance
            };

            var galaxy = generator.Generate(settings);

            Assert.All(galaxy.Planets, planet => Assert.True(MinDistanceKept(planet)));

            bool PassesSocialDistancingRule(Planet p1, Planet p2) => p1 != p2?p1.Position.DistanceTo(p2.Position) >= minDistance : true;
            bool MinDistanceKept(Planet planet) => galaxy.Planets.All(otherPlanet => PassesSocialDistancingRule(planet, otherPlanet));
        }
Example #6
0
        public void PlanetsHaveValidPositions(int size, int planets, int padding)
        {
            var generator = new GalaxyGenerator();

            var settings = new GalaxyGeneratorSettings()
            {
                GalaxySize  = size,
                PlanetCount = planets,
                Padding     = padding,
            };

            var galaxy = generator.Generate(settings);
            var bounds = new GalaxyBounds(size);
            var min    = bounds.Min + padding;
            var max    = bounds.Max - padding;

            Assert.All(galaxy.Planets, planet => Assert.True(PointInRange(planet.Position)));

            bool CoordInRange(int coord) => coord >= min && coord <= max;
            bool PointInRange(Position position) => CoordInRange(position.X) && CoordInRange(position.Y);;
        }