public void ExplainPnLAttributionFacts() { var(startModel, endModel, portfolio) = GenerateTestData(); var zar = TestProviderHelper.CurrencyProvider.GetCurrency("ZAR"); var result = Models.PnLAttribution.ExplainAttributionInLineGreeks(portfolio, startModel, endModel, zar, TestProviderHelper.CurrencyProvider); var sum = result.GetAllRows().Sum(x => x.Value); var expected = portfolio.PV(endModel, zar).GetAllRows().Sum(x => x.Value) - portfolio.PV(startModel, zar).GetAllRows().Sum(x => x.Value); Assert.Equal(expected, sum, 10); startModel.AttachPortfolio(portfolio); var greeks = Qwack.Models.Risk.BasicMetrics.AssetGreeks((AssetFxModel)startModel, endModel.BuildDate, zar, TestProviderHelper.CurrencyProvider).Result; result = Models.PnLAttribution.ExplainAttribution(portfolio, startModel, endModel, zar, greeks, TestProviderHelper.CurrencyProvider); sum = result.GetAllRows().Sum(x => x.Value); Assert.Equal(expected, sum, 10); }