public void CalculateReturnShouldNotAnnualizeWhenGivenDoNotAnnualizeOption()
        {
            var month = new MonthYear(2013, 12);

            _returnSeries.AddReturn(month, 0.1m);
            _returnSeries.AddReturn(month.AddMonths(-1), 0.2m);
            _returnSeries.AddReturn(month.AddMonths(-2), 0.3m);
            _returnSeries.AddReturn(month.AddMonths(-3), 0.4m);
            _returnSeries.AddReturn(month.AddMonths(-4), 0.5m);
            _returnSeries.AddReturn(month.AddMonths(-5), 0.6m);
            _returnSeries.AddReturn(month.AddMonths(-6), 0.7m);
            _returnSeries.AddReturn(month.AddMonths(-7), 0.8m);
            _returnSeries.AddReturn(month.AddMonths(-8), 0.9m);
            _returnSeries.AddReturn(month.AddMonths(-9), 0.10m);
            _returnSeries.AddReturn(month.AddMonths(-10), 0.11m);
            _returnSeries.AddReturn(month.AddMonths(-11), 0.12m);
            _returnSeries.AddReturn(month.AddMonths(-12), 0.13m);
            _returnSeries.AddReturn(month.AddMonths(-13), 0.14m);

            var req = new CalculateReturnRequest(month, 13);

            req.AnnualizeAction = AnnualizeActionEnum.DoNotAnnualize;

            var result = _returnSeries.CalculateReturn(req);

            string expectedCalculation = @"((1 + ((1 + ((1 + ((1 + ((1 + ((1 + ((1 + ((1 + ((1 + ((1 + ((1 + ((1 + 0.1) * (1 + 0.2) - 1)) * (1 + 0.3) - 1)) * (1 + 0.4) - 1)) * (1 + 0.5) - 1)) * (1 + 0.6) - 1)) * (1 + 0.7) - 1)) * (1 + 0.8) - 1)) * (1 + 0.9) - 1)) * (1 + 0.10) - 1)) * (1 + 0.11) - 1)) * (1 + 0.12) - 1)) * (1 + 0.13) - 1) = 50.80166493428326400";

            var expectedResult = ReturnResult.CreateWithValue(50.80166493428326400m, expectedCalculation);

            Assert.NotNull(result);
            result.ShouldBeSameAs(expectedResult);
        }
        public void CalculateReturnShouldAnnualizeGivenMonthsGreaterThan12()
        {
            var month = new MonthYear(2013, 12);

            _returnSeries.AddReturn(month, 0.1m);
            _returnSeries.AddReturn(month.AddMonths(-1), 0.2m);
            _returnSeries.AddReturn(month.AddMonths(-2), 0.3m);
            _returnSeries.AddReturn(month.AddMonths(-3), 0.4m);
            _returnSeries.AddReturn(month.AddMonths(-4), 0.5m);
            _returnSeries.AddReturn(month.AddMonths(-5), 0.6m);
            _returnSeries.AddReturn(month.AddMonths(-6), 0.7m);
            _returnSeries.AddReturn(month.AddMonths(-7), 0.8m);
            _returnSeries.AddReturn(month.AddMonths(-8), 0.9m);
            _returnSeries.AddReturn(month.AddMonths(-9), 0.10m);
            _returnSeries.AddReturn(month.AddMonths(-10), 0.11m);
            _returnSeries.AddReturn(month.AddMonths(-11), 0.12m);
            _returnSeries.AddReturn(month.AddMonths(-12), 0.13m);
            _returnSeries.AddReturn(month.AddMonths(-13), 0.14m);

            var result = _returnSeries.CalculateReturn(new CalculateReturnRequest(month, 13));

            string expectedCalculation = @"((1 + ((1 + ((1 + ((1 + ((1 + ((1 + ((1 + ((1 + ((1 + ((1 + ((1 + ((1 + 0.1) * (1 + 0.2) - 1)) * (1 + 0.3) - 1)) * (1 + 0.4) - 1)) * (1 + 0.5) - 1)) * (1 + 0.6) - 1)) * (1 + 0.7) - 1)) * (1 + 0.8) - 1)) * (1 + 0.9) - 1)) * (1 + 0.10) - 1)) * (1 + 0.11) - 1)) * (1 + 0.12) - 1)) * (1 + 0.13) - 1) = 50.80166493428326400"
                                         + System.Environment.NewLine + @"((1 + 50.80166493428326400) ^ (12 * 1 / 13)) - 1 = 37.2358830610463";

            var expectedResult = ReturnResult.CreateWithValue(37.2358830610463m, expectedCalculation);

            Assert.NotNull(result);
            result.ShouldBeSameAs(expectedResult);
        }
        public void CalculateReturnShouldReturnValueWhenMonthFound()
        {
            var month = new MonthYear(2013, 1);

            _returnSeries.AddReturn(month, 0.03m);
            var result = _returnSeries.CalculateReturn(new CalculateReturnRequest(month, 1));

            var expectedResult = ReturnResult.CreateWithValue(0.03m, "0.03 = 0.03");

            Assert.NotNull(result);
            result.ShouldBeSameAs(expectedResult);
        }
        public void CalculateReturnShouldApplyGeoMetricLinkingWhenGivenMultipleMonths()
        {
            var month         = new MonthYear(2013, 1);
            var previousMonth = month.AddMonths(-1);

            _returnSeries.AddReturn(previousMonth, 0.2m);
            _returnSeries.AddReturn(month, 0.1m);

            var result = _returnSeries.CalculateReturn(new CalculateReturnRequest(month, 2));

            var expectedResult = ReturnResult.CreateWithValue(0.32m, "((1 + 0.2) * (1 + 0.1) - 1) = 0.32");

            Assert.NotNull(result);
            result.ShouldBeSameAs(expectedResult);
        }