public void CrossingTest()
        {
            Random random = new Random(2014);

            EvolvablePopulation select     = new SelectMutateCrossoverPopulation(null, random, new TestCreator(random), 20);
            EvolvablePopulation individual = new IndividualMutateAndCrossoverPopulation(null, random, new TestCreator(random), 20);

            select.Feed(100);
            individual.Feed(100);

            EvolvablePopulation child1 = (EvolvablePopulation)select.Crossover(individual);

            Assert.IsInstanceOfType(child1, typeof(SelectMutateCrossoverPopulation));
            Assert.AreEqual(select.Fitness, child1.Fitness);

            Assert.AreEqual(40, child1.PopulationSize);
            child1.Feed(100);
            Assert.AreEqual(20, child1.PopulationSize);
            AssertEx.IsGreaterThanOrEqualTo(child1.Fitness, select.Fitness);

            individual.Feed(1000);

            EvolvablePopulation child2 = (EvolvablePopulation)select.Crossover(individual);

            Assert.IsInstanceOfType(child2, typeof(IndividualMutateAndCrossoverPopulation));
            Assert.AreEqual(individual.Fitness, child2.Fitness);
            AssertEx.IsGreaterThanOrEqualTo(child2.Fitness, individual.Fitness);

            Assert.AreEqual(40, child2.PopulationSize);
            child2.Feed(100);
            Assert.AreEqual(20, child2.PopulationSize);
        }
        public void NoClonesAroundTest()
        {
            Random random = new Random(2014);

            SelectMutateCrossoverPopulation pool = new SelectMutateCrossoverPopulation(null, random, new StencilSpeciesArrCreator(random, 10, 10, new double[] { 0.25, 0.25, 0.25, 0.25 }), 64);

            for (int g = 0; g < 10; g++)
            {
                pool.Feed(1000);

                for (int i = 0; i < pool.Individuals.Count - 1; i++)
                {
                    for (int j = i + 1; j < pool.Individuals.Count; j++)
                    {
                        if (pool.Individuals[i].Equals(pool.Individuals[j]))
                        {
                            throw new Exception("Clones!! " + i + " and " + j);
                        }
                    }
                }
            }
        }