public void Ticks_OneAlive_100Generations_AllDead()
        {
            // arrange
            var worldGenerator = new EnvironmentalWorldGenerator();
            var cellGrid       = new EnvironmentalCellGrid
                                 (
                new[]
            {
                new[] { Dead(), Dead(), Dead() },
                new[] { Dead(), Alive(), Dead() },
                new[] { Dead(), Dead(), Dead() }
            }
                                 );
            var world = new EnvironmentalWorldBuilder().With(w => w.Data, new EnvironmentalWorldData {
                Grid = cellGrid
            }).Create();
            var expected = new EnvironmentalCellGrid(EnumerablePrelude.Repeat(() => EnumerablePrelude.Repeat(Dead, 3).ToArray(), 3).ToArray());

            // act
            var result = worldGenerator.Ticks(world).Skip(100).First().Data.Grid;

            // assert
            Assert.AreEqual(GridToString(expected), GridToString(result));
        }
        public void Ticks_WithOscillating_100Generations_IsSame()
        {
            // arrange
            var worldGenerator = new EnvironmentalWorldGenerator();
            var cellGrid       = new EnvironmentalCellGrid
                                 (
                new[]
            {
                new[] { Dead(), Dead(), Dead(), Dead() },
                new[] { Dead(), Alive(), Alive(), Dead() },
                new[] { Dead(), Alive(), Alive(), Dead() },
                new[] { Dead(), Dead(), Dead(), Dead() }
            }
                                 );
            var world = new EnvironmentalWorldBuilder().With(w => w.Data, new EnvironmentalWorldData {
                Grid = cellGrid
            }).Create();

            // act
            var result = worldGenerator.Ticks(world).Skip(100).First().Data.Grid;

            // assert
            Assert.AreEqual(GridToString(cellGrid), GridToString(result));
        }