public void SinglePointCrossoverOperator_GenerateCrossover_NullParents()
        {
            SinglePointCrossoverOperator op = new SinglePointCrossoverOperator();
            PrivateObject accessor          = new PrivateObject(op);

            Assert.Throws <ArgumentNullException>(() => accessor.Invoke("GenerateCrossover", (IList <GeneticEntity>)null));
        }
        public void SinglePointCrossoverOperator_Validation_WithoutListEntityBase()
        {
            SinglePointCrossoverOperator op        = new SinglePointCrossoverOperator();
            MockGeneticAlgorithm         algorithm = new MockGeneticAlgorithm
            {
                GeneticEntitySeed = new MockEntity()
            };

            op.Initialize(algorithm);

            Assert.Throws <ValidationException>(() => op.Validate());
        }
        public void SinglePointCrossoverOperator_Validation_WithListEntityBase()
        {
            SinglePointCrossoverOperator op        = new SinglePointCrossoverOperator();
            MockGeneticAlgorithm         algorithm = new MockGeneticAlgorithm
            {
                GeneticEntitySeed = new IntegerListEntity()
            };

            op.Initialize(algorithm);

            op.Validate();
        }
        public void SinglePointCrossoverOperator_GenerateCrossover_DifferentLength()
        {
            MockGeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                PopulationSeed    = new MockPopulation(),
                SelectionOperator = new MockSelectionOperator(),
                FitnessEvaluator  = new MockFitnessEvaluator(),
                CrossoverOperator = new SinglePointCrossoverOperator
                {
                    CrossoverRate = 1
                },
                GeneticEntitySeed = new BinaryStringEntity
                {
                    MinimumStartingLength = 4,
                    MaximumStartingLength = 4
                }
            };

            algorithm.GeneticEntitySeed.Initialize(algorithm);

            SinglePointCrossoverOperator op = new SinglePointCrossoverOperator {
                CrossoverRate = 1
            };

            op.Initialize(algorithm);
            BinaryStringEntity entity1 = (BinaryStringEntity)algorithm.GeneticEntitySeed.CreateNewAndInitialize();

            entity1.Length = 5;
            entity1[0]     = true;
            entity1[1]     = false;
            entity1[2]     = false;
            entity1[3]     = true;
            entity1[4]     = true;

            BinaryStringEntity entity2 = (BinaryStringEntity)algorithm.GeneticEntitySeed.CreateNewAndInitialize();

            entity2.Initialize(algorithm);
            entity2[0] = true;
            entity2[1] = true;
            entity2[2] = false;
            entity2[3] = false;

            TestRandomUtil randomUtil = new TestRandomUtil();

            RandomNumberService.Instance = randomUtil;

            randomUtil.RandomVal = 1;
            IList <GeneticEntity> result = op.Crossover(new GeneticEntity[] { entity1, entity2 }).ToList();

            BinaryStringEntity resultEntity1 = (BinaryStringEntity)result[0];
            BinaryStringEntity resultEntity2 = (BinaryStringEntity)result[1];

            Assert.Equal("1100", resultEntity1.Representation);
            Assert.Equal("10011", resultEntity2.Representation);

            randomUtil.RandomVal = 3;
            result = op.Crossover(new GeneticEntity[] { entity1, entity2 }).ToList();

            resultEntity1 = (BinaryStringEntity)result[0];
            resultEntity2 = (BinaryStringEntity)result[1];

            Assert.Equal("1000", resultEntity1.Representation);
            Assert.Equal("11011", resultEntity2.Representation);
        }