public async Task FitnessTargetTerminator_IsComplete_RawFitness()
        {
            double           fitnessTarget = 15;
            GeneticAlgorithm algorithm     = GetAlgorithm(fitnessTarget, FitnessType.Raw);
            await algorithm.InitializeAsync();

            FitnessTargetTerminator terminator = (FitnessTargetTerminator)algorithm.Terminator;

            terminator.Initialize(algorithm);

            // Check with no populations
            Assert.False(terminator.IsComplete(), "No genetic entities have the fitness target.");

            MockEntity entity = new MockEntity();

            entity.Initialize(algorithm);
            SimplePopulation population = new SimplePopulation();

            population.Initialize(algorithm);
            population.Entities.Add(entity);
            algorithm.Environment.Populations.Add(population);

            // Check with a population with one entity
            Assert.False(terminator.IsComplete(), "No genetic entities have the fitness target.");

            PrivateObject accessor = new PrivateObject(entity, new PrivateType(typeof(GeneticEntity)));

            accessor.SetField("rawFitnessValue", 15);
            Assert.True(terminator.IsComplete(), "A entity does have the fitness target.");
        }
        public async Task FitnessTargetTerminator_IsComplete_ScaledFitness()
        {
            double           fitnessTarget = 15;
            GeneticAlgorithm algorithm     = GetAlgorithm(fitnessTarget, FitnessType.Scaled);
            await algorithm.InitializeAsync();

            FitnessTargetTerminator terminator = (FitnessTargetTerminator)algorithm.Terminator;

            terminator.Initialize(algorithm);

            // Check with no populations
            Assert.False(terminator.IsComplete(), "No genetic entities have the fitness target.");

            MockEntity entity = new MockEntity();

            entity.Initialize(algorithm);
            SimplePopulation population = new SimplePopulation();

            population.Initialize(algorithm);
            population.Entities.Add(entity);
            algorithm.Environment.Populations.Add(population);

            // Check with a population with one entity
            Assert.False(terminator.IsComplete(), "No genetic entities have the fitness target.");

            entity.ScaledFitnessValue = 15;
            Assert.True(terminator.IsComplete(), "A entity does have the fitness target.");
        }
        public void FitnessTargetTerminator_Serialization()
        {
            FitnessTargetTerminator terminator = new FitnessTargetTerminator();

            terminator.FitnessTarget = 20;
            terminator.FitnessType   = FitnessType.Raw;

            FitnessTargetTerminator result = (FitnessTargetTerminator)SerializationHelper.TestSerialization(terminator, new Type[0]);

            Assert.Equal(terminator.FitnessTarget, result.FitnessTarget);
            Assert.Equal(terminator.FitnessType, result.FitnessType);
        }