public ITermination Or()
        {
            var target = new OrTermination(_falseTermination, _trueTermination);
            var ga     = Substitute.For <IGeneticAlgorithm>();

            target.HasReached(ga);

            return(target);
        }
        public void HasReached_LessThan2Terminations_Exception()
        {
            var target = new OrTermination();

            target.AddTermination(Substitute.For <ITermination>());

            Assert.Catch <InvalidOperationException>(() =>
            {
                target.HasReached(Substitute.For <IGeneticAlgorithm>());
            }, "The OrTermination needs at least 2 terminations to perform. Please, add the missing terminations.");
        }
        public void HasReached_LessThan2Terminations_Exception()
        {
            var target = new OrTermination();

            target.AddTermination(MockRepository.GenerateMock <ITermination>());

            ExceptionAssert.IsThrowing(new InvalidOperationException("The OrTermination needs at least 2 terminations to perform. Please, add the missing terminations."), () =>
            {
                target.HasReached(MockRepository.GenerateMock <IGeneticAlgorithm>());
            });
        }
        public void HasReached_OnlyOneTerminationsHasReached_True()
        {
            var target = new OrTermination();
            var ga     = Substitute.For <IGeneticAlgorithm>();

            var t1 = Substitute.For <ITermination>();

            t1.HasReached(ga).ReturnsForAnyArgs(false);
            target.AddTermination(t1);

            var t2 = Substitute.For <ITermination>();

            t2.HasReached(ga).ReturnsForAnyArgs(true);
            target.AddTermination(t2);

            var t3 = Substitute.For <ITermination>();

            t3.HasReached(ga).ReturnsForAnyArgs(false);
            target.AddTermination(t3);

            Assert.IsTrue(target.HasReached(ga));
        }
        public void HasReached_OnlyOneTerminationsHasReached_True()
        {
            var target = new OrTermination();
            var ga     = MockRepository.GenerateMock <IGeneticAlgorithm>();

            var t1 = MockRepository.GenerateMock <ITermination>();

            t1.Expect(t => t.HasReached(ga)).IgnoreArguments().Return(false);
            target.AddTermination(t1);

            var t2 = MockRepository.GenerateMock <ITermination>();

            t2.Expect(t => t.HasReached(ga)).IgnoreArguments().Return(true);
            target.AddTermination(t2);

            var t3 = MockRepository.GenerateMock <ITermination>();

            t3.Expect(t => t.HasReached(ga)).IgnoreArguments().Return(false);
            target.AddTermination(t3);

            Assert.IsTrue(target.HasReached(ga));
        }