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);
        }
        private SerializableReturnResult CalculateNetOfFeesReturn(
            InvestmentVehicle portfolio,
            CalculateReturnRequest request)
        {
            var result = portfolio.CalculateReturn(request, FeeType.NetOfFees);

            return(new SerializableReturnResult(result));
        }
 private void AssertRequestAreEqual(
     CalculateReturnRequest requestUnderTest,
     CalculateReturnRequest expected)
 {
     Assert.Equal(requestUnderTest.AnnualizeAction, expected.AnnualizeAction);
     Assert.Equal(requestUnderTest.EndMonth, expected.EndMonth);
     Assert.Equal(requestUnderTest.NumberOfMonths, expected.NumberOfMonths);
 }
        public void TwelveMonthShouldReturnRequestForThreeBeforeTheGivenEndDate()
        {
            var monthYear = new MonthYear(2000, 5);

            var request = CalculateReturnRequestFactory.TwelveMonth(monthYear);

            var expected = new CalculateReturnRequest()
            {
                AnnualizeAction = AnnualizeActionEnum.Annualize,
                EndMonth        = monthYear,
                NumberOfMonths  = 12
            };

            AssertRequestAreEqual(request, expected);
        }
        public void YearToDateShouldReturnRequestFromFirstOfYearToEndMonth(
            int year,
            int month,
            int expectedNumberOfMonths)
        {
            var monthYear = new MonthYear(year, month);

            var request = CalculateReturnRequestFactory.YearToDate(monthYear);

            var expected = new CalculateReturnRequest()
            {
                AnnualizeAction = AnnualizeActionEnum.Annualize,
                EndMonth        = monthYear,
                NumberOfMonths  = expectedNumberOfMonths
            };

            AssertRequestAreEqual(request, expected);
        }