### Question:
DiscountingBulletPaymentTradePricer { public ExplainMap explainPresentValue(ResolvedBulletPaymentTrade trade, BaseProvider provider) { return paymentPricer.explainPresentValue(trade.getProduct().getPayment(), provider); } DiscountingBulletPaymentTradePricer(
      DiscountingPaymentPricer paymentPricer); DiscountingPaymentPricer getPaymentPricer(); CurrencyAmount presentValue(ResolvedBulletPaymentTrade trade, BaseProvider provider); ExplainMap explainPresentValue(ResolvedBulletPaymentTrade trade, BaseProvider provider); PointSensitivities presentValueSensitivity(ResolvedBulletPaymentTrade trade, BaseProvider provider); CashFlows cashFlows(ResolvedBulletPaymentTrade trade, BaseProvider provider); CurrencyAmount currencyExposure(ResolvedBulletPaymentTrade trade, BaseProvider provider); CurrencyAmount currentCash(ResolvedBulletPaymentTrade trade, BaseProvider provider); static final DiscountingBulletPaymentTradePricer DEFAULT; }### Answer:
@Test public void test_explainPresentValue_provider_ended() { ExplainMap explain = PRICER.explainPresentValue(TRADE_PAST, PROVIDER); assertThat(explain.get(ExplainKey.ENTRY_TYPE).get()).isEqualTo("Payment"); assertThat(explain.get(ExplainKey.PAYMENT_DATE).get()).isEqualTo(PAYMENT_DATE_PAST); assertThat(explain.get(ExplainKey.PAYMENT_CURRENCY).get()).isEqualTo(USD); assertThat(explain.get(ExplainKey.FORECAST_VALUE).get().getCurrency()).isEqualTo(USD); assertThat(explain.get(ExplainKey.FORECAST_VALUE).get().getAmount()).isCloseTo(0, offset(TOL)); assertThat(explain.get(ExplainKey.PRESENT_VALUE).get().getCurrency()).isEqualTo(USD); assertThat(explain.get(ExplainKey.PRESENT_VALUE).get().getAmount()).isCloseTo(0, offset(TOL)); }