Example #1
0
        public void MapPortfolioToViewModelOnSuccessReturnsProperties()
        {
            //arrange
            var mean      = 1D;
            var statistic = new Mock <IStatistic>();

            statistic.Setup(s => s.Mean).Returns(mean);

            var frequency      = 2D;
            var histogramDatum = new HistogramDatum
            {
                Frequency = frequency
            };
            IList <HistogramDatum> histogram = new[] { histogramDatum };

            var            successProbability   = 3D;
            IList <double> successProbabilities = new[] { successProbability };

            var portfolio = new Mock <IPortfolio>();

            portfolio.Setup(p => p.Statistics).Returns(statistic.Object);
            portfolio.Setup(p => p.Histogram).Returns(histogram);
            portfolio.Setup(p => p.SuccessProbabilities).Returns(successProbabilities);

            var statisticsViewModel = new StatisticViewModel {
                Mean = mean
            };
            var statisticMapper = new Mock <IStatisticMapper>();

            statisticMapper.Setup(m => m.MapStatisticToViewModel(
                                      It.Is <IStatistic>(s => s.Mean == mean)))
            .Returns(statisticsViewModel);

            var mapper = new PortfolioMapper(statisticMapper.Object);

            //act
            var result = mapper.MapPortfolioToViewModel(portfolio.Object);

            //assert
            Assert.AreEqual(mean, result.Statistics.Mean);
            Assert.AreEqual(frequency, result.Histogram[0].Frequency);
            Assert.AreEqual(successProbability, result.SuccessProbabilities[0]);
        }
Example #2
0
        public void HistogramOnSuccessReturnsHistogramData()
        {
            //arrange
            var interval = 1;
            var datum    = new HistogramDatum {
                Interval = interval
            };
            var    data        = new[] { datum };
            double price       = 2;
            var    simulations = new[] { price };

            var minimum      = 3;
            var maximum      = 4;
            var distribution = new Mock <IDistribution>();

            distribution.Setup(d => d.Minimum).Returns(minimum);
            distribution.Setup(d => d.Maximum).Returns(maximum);
            var distributions = new[] { distribution.Object };

            var histogram = new Mock <IHistogram>();

            histogram.Setup(h => h.GetHistogramData(
                                It.Is <HistogramContext>(c => c.GlobalXMin == minimum && c.GlobalXMax == maximum && c.Simulations[0] == price),
                                It.IsAny <int>()))
            .Returns(data);

            var node = new Node(null, histogram.Object);

            node.Simulations   = simulations;
            node.Distributions = distributions;

            //act
            var result = node.Histogram;

            //assert
            Assert.AreEqual(interval, result[0].Interval);
        }
Example #3
0
        public void InitOnSuccessReturnsCorrectProbabilities()
        {
            //arrange
            int expectedPortfolioSimulation = 10; // int avoids floating point errors
            var simulation  = 110D;
            var simulations = new[] { simulation };

            var nodeInitialInvestment = 1000D;
            var nodeInitialPrice      = 100D;
            var node = new Mock <INode>();

            node.Setup(n => n.InitialInvestment).Returns(nodeInitialInvestment);
            node.Setup(n => n.InitialPrice).Returns(nodeInitialPrice);
            node.Setup(n => n.Simulations).Returns(simulations);
            node.Setup(n => n.PortfolioWeight).Returns(1);
            var nodes = new[] { node.Object };

            var cashFlowId = 1;
            var cashFlow   = new CashFlow {
                Id = cashFlowId
            };
            var cashFlows = new[] { cashFlow };

            var successProbability   = .5D;
            var successProbabilities = new[] { successProbability };
            var portfolioSimulator   = new Mock <IPortfolioSimulator>();

            portfolioSimulator.Setup(ps => ps.CalculateSuccessProbabilities(
                                         It.Is <IList <INode> >(n => n[0].InitialInvestment == nodeInitialInvestment),
                                         It.Is <IList <CashFlow> >(cf => cf[0].Id == cashFlowId)))
            .Returns(successProbabilities);

            var statistics = new Mock <IStatistic>();

            var interval       = 3D;
            var histogramDatum = new HistogramDatum {
                Interval = interval
            };
            var histogramData = new[] { histogramDatum };
            var histogram     = new Mock <IHistogram>();

            histogram.Setup(h => h.GetHistogramData(
                                It.Is <HistogramContext>(
                                    ctx => (int)ctx.Simulations[0] == expectedPortfolioSimulation &&
                                    (int)ctx.GlobalXMin == expectedPortfolioSimulation &&
                                    (int)ctx.GlobalXMax == expectedPortfolioSimulation),
                                It.IsAny <int>()))
            .Returns(histogramData);

            var portfolio = new Portfolio(statistics.Object, histogram.Object, portfolioSimulator.Object);

            //act
            portfolio.Init(nodes, cashFlows);
            var initialValueResult         = portfolio.InitialValue;
            var statisticsResult           = portfolio.Statistics;
            var histogramResult            = portfolio.Histogram;
            var successProbabilitiesResult = portfolio.SuccessProbabilities;

            //assert
            Assert.AreEqual(nodeInitialInvestment, initialValueResult);
            Assert.AreSame(statistics.Object, statisticsResult);
            statistics.Verify(s => s.Init(
                                  It.Is <IList <double> >(sim => (int)sim[0] == expectedPortfolioSimulation)
                                  ));
            Assert.AreEqual(interval, histogramResult[0].Interval);
            Assert.AreEqual(successProbability, successProbabilitiesResult[0]);
        }