public void ShouldEventuallyFindAnEvenRandomInteger_WhenGivenRandomInteger()
        {
            
            var exceptionList = new List<Exception>();
            var evenNumberFound = new FibonacciRetry().Do(() =>
            {
                var randInt = rand.Next(0, 10000);
                if (randInt % 2 == 0)
                    return true;
                throw new ApplicationException($"Random int [{randInt}] was odd.");
            }, ref exceptionList, 100, 5);

            if (evenNumberFound)
            {
                Debug.WriteLine("Successfully found an even integer after {0} tries.", exceptionList.Count);
            }
            var exceptionsText = new StringBuilder();
            foreach (var exceptionString in exceptionList)
            {
                exceptionsText.Append(exceptionString);
            }
            var message = String.Format("Failed to find an even number [{0}] times.  Details: {1}", exceptionList.Count,
                exceptionsText);
            Assert.IsTrue(evenNumberFound, message);
        }
        public void ShouldFailTenTimesThenSucceed()
        {
            var exceptions = new List<Exception>();
            var trueAfterTenTries = new FibonacciRetry().Do<bool>(() =>
            {
                if (_tenTimeFailCounter-- > 0)
                {
                    throw new ApplicationException($"Counter is at {_tenTimeFailCounter+1}, thus greater than zero");
                }
                return true;
            }, ref exceptions, 11, 5);

            Assert.IsTrue(trueAfterTenTries, "Test delegate never succeeded");

            Assert.AreEqual(10, exceptions.Count);
        }
 public void ShouldDoSimpleTask_WhenAsked()
 {
     var two = new FibonacciRetry().Do(() => 1+1);
     Assert.AreEqual(2, two);
    
 }
 public void ShouldReturnDefaultOfT_WhenDividingByZero()
 {
     var fibonacciRetry = new FibonacciRetry();
     var i = 0;
     Assert.AreEqual(default(object), fibonacciRetry.Do<object>(() => 27 / i));
 }
 public void ShouldRunBaseCase_WhenCalledWithDefault()
 {
     var i = 0;
     var ret = new FibonacciRetry().Do<object>((() => $"Hello {i++}"));
     Assert.AreEqual("Hello 0", ret);
 }