public void Mutate_Indexes_RandomIndexes()
        {
            var target = new UniformMutation(0, 2);
            var chromosome = MockRepository.GenerateStub<ChromosomeBase>(3);
            chromosome.ReplaceGenes(0, new Gene[]
                                                     {
                new Gene(1),
                new Gene(1),
                new Gene(1)
            });

            chromosome.Expect(c => c.GenerateGene(0)).Return(new Gene(0));
            chromosome.Expect(c => c.GenerateGene(2)).Return(new Gene(10));
            RandomizationProvider.Current = MockRepository.GenerateMock<IRandomization>();

            target.Mutate(chromosome, 1);
            Assert.AreEqual(0, chromosome.GetGene(0).Value);
            Assert.AreEqual(1, chromosome.GetGene(1).Value);
            Assert.AreEqual(10, chromosome.GetGene(2).Value);

            chromosome.VerifyAllExpectations();
            RandomizationProvider.Current.VerifyAllExpectations();
        }
        public void Mutate_InvalidIndexes_Exception()
        {
            var target = new UniformMutation(0, 3);
            var chromosome = MockRepository.GenerateStub<ChromosomeBase>(3);
            chromosome.ReplaceGenes(0, new Gene[]
                                                     {
                new Gene(1),
                new Gene(1),
                new Gene(1)
            });

            chromosome.Expect(c => c.GenerateGene(0)).Return(new Gene(0));

            RandomizationProvider.Current = MockRepository.GenerateMock<IRandomization>();

            ExceptionAssert.IsThrowing(new MutationException(target, "The chromosome has no gene on index 3. The chromosome genes lenght is 3."), () =>
            {
                target.Mutate(chromosome, 1);
            });

            chromosome.VerifyAllExpectations();
            RandomizationProvider.Current.VerifyAllExpectations();
        }