public void Mutate()
        {
            var random = Substitute.For <SecureRandom>();

            var nextCallCount = 0;

            random.Next(Arg.Any <int>()).Returns((_) =>
            {
                var result = 0;

                if (nextCallCount == 0)
                {
                    result = 1;
                }
                else if (nextCallCount == 1)
                {
                    result = 0;
                }
                else
                {
                    throw new InvalidOperationException("Too many Next(int) calls.");
                }

                nextCallCount++;
                return(result);
            });
            random.NextDouble().Returns(0d);

            using (var parameters = new ExpressionEvolverGeneticAlgorithmParameters(
                       new RandomObjectGenerator().Generate <ReadOnlyCollection <ExpressionEvolverResult> >(),
                       random))
            {
                Assert.AreEqual("a => (a + a)", parameters.Mutator(a => 3 + a).ToString());
            }
        }
 public void MutateWithNullArgument()
 {
     using (var parameters = new ExpressionEvolverGeneticAlgorithmParameters(
                a => a))
     {
         parameters.Mutator(null);
     }
 }
        public void MutateOnDisposedObject()
        {
            ExpressionEvolverGeneticAlgorithmParameters parameters = null;

            using (parameters = new ExpressionEvolverGeneticAlgorithmParameters(
                       a => a)) { }

            parameters.Mutator(null);
        }
        public void MutateWithNoMutation()
        {
            var random = Substitute.For <SecureRandom>();

            random.NextDouble().Returns(1d);

            using (var parameters = new ExpressionEvolverGeneticAlgorithmParameters(
                       new RandomObjectGenerator().Generate <ReadOnlyCollection <ExpressionEvolverResult> >(),
                       random))
            {
                Assert.AreEqual("a => (3 + a)", parameters.Mutator(a => 3 + a).ToString());
            }
        }