public void Operate_AllConditionsPassed_ZeroMutationChance_ReturnsOriginalDv()
        {
            var mutator = new MutationConditional(
                insideMutationDoNothing,
                o => Convert.ToDouble(o) >= double.MinValue);

            var newDv = mutator.Operate(testDv);

            Assert.Equal(testDv, newDv);
        }
        public void Operate_ConditionPassesForOneElement_OneMutationDesired_ReturnsCorrectlyMutatedDv()
        {
            var mutator = new MutationConditional(
                insideMutation,
                o => Convert.ToDouble(o) < 0.01);

            var newDv = mutator.Operate(testDv);

            Assert.NotEqual(testDv, newDv);
            Assert.Equal(testDv.Count, newDv.Count);
            var changedValue = Convert.ToDouble(newDv.Last());
            var oldValue     = Convert.ToDouble(testDv.Last());

            Assert.True(Math.Abs(Math.Abs(oldValue - changedValue) - mutation) < 1e-8);
        }
        public void Operate_AllConditionsPassed_OneMutationDesired_ReturnsMutatedDv()
        {
            var mutator = new MutationConditional(
                insideMutation,
                o => Convert.ToDouble(o) >= double.MinValue);

            var newDv = mutator.Operate(testDv);

            Assert.NotEqual(testDv, newDv);
            Assert.Equal(testDv.Count, newDv.Count);
            var changedValue = newDv.Where((v, i) => (double)v != (double)testDv.ElementAt(i)).Select(d => (double)d);

            Assert.True(changedValue.Count() == 1);
            var oldValue = testDv.Where((v, i) => (double)v != (double)newDv.ElementAt(i)).Select(d => (double)d);

            Assert.True(Math.Abs(Math.Abs(oldValue.First() - changedValue.First()) - mutation) < 1e-8);
        }