public void Calculate() { // Arrange var service = new FibonacciNumberService(); // Act var test1 = service.Calculate(-4); var test2 = service.Calculate(-5); var test3 = service.Calculate(0); var test4 = service.Calculate(1); var test5 = service.Calculate(-6); var test6 = service.Calculate(3); var test7 = service.Calculate(4); var test8 = service.Calculate(5); var test9 = service.Calculate(6); var test10 = service.Calculate(7); var test11 = service.Calculate(46); var test12 = service.Calculate(47); var test13 = service.Calculate(47); long? test14 = null; try { test14 = service.Calculate(93); } catch (Exception ex) when (ex.Message.StartsWith("Value cannot be greater than 92, since the result will cause a 64-bit integer overflow.")) { // Silently catch the expected exception. } long? test15 = null; try { test15 = service.Calculate(-93); } catch (Exception ex) when (ex.Message.StartsWith("Value cannot be less than -92, since the result will cause a 64-bit integer overflow.")) { // Silently catch the expected exception. } // Assert Assert.IsTrue(test1 == -3); Assert.IsTrue(test2 == 5); Assert.IsTrue(test3 == 0); Assert.IsTrue(test4 == 1); Assert.IsTrue(test5 == -8); Assert.IsTrue(test6 == 2); Assert.IsTrue(test7 == 3); Assert.IsTrue(test8 == 5); Assert.IsTrue(test9 == 8); Assert.IsTrue(test10 == 13); Assert.IsTrue(test11 == 1836311903); Assert.IsTrue(test12 == 2971215073); Assert.IsTrue(test13 == 2971215073); Assert.IsTrue(test14 == null); Assert.IsTrue(test15 == null); }
/// <summary> /// Generate the Fibonacci Number. /// </summary> /// <param name="n">Index in the sequence.</param> /// <returns>The number at n position in the Fibonacci sequence.</returns> public long FibonacciNumber(long n) { var properties = new Dictionary<string, string> { { "Argument 'n'", n.ToString() } }; telemetry.TrackEvent("FibonacciNumber", properties); long result = 0; try { result = new FibonacciNumberService().Calculate(n); } catch (ArgumentOutOfRangeException) { // The ArgumentOutOfRangeException is expected, therefore re-throw it further. throw; } catch (Exception exception) { telemetry.TrackException(exception); } return result; }