public void test_explainPresentValueWithZSpread() {
ExplainMapBuilder builder = ExplainMap.builder();
PRICER.explainPresentValueWithZSpread(
PERIOD_INTERP, IRP_BEFORE_START, ICDF_BEFORE_START, builder, Z_SPREAD, PERIODIC, PERIOD_PER_YEAR);
ExplainMap explain = builder.build();
assertEquals(explain.get(ExplainKey.ENTRY_TYPE).get(), "CapitalIndexedBondPaymentPeriod");
assertEquals(explain.get(ExplainKey.PAYMENT_DATE).get(), PERIOD_INTERP.getPaymentDate());
assertEquals(explain.get(ExplainKey.PAYMENT_CURRENCY).get(), PERIOD_INTERP.getCurrency());
assertEquals(explain.get(ExplainKey.START_DATE).get(), START);
assertEquals(explain.get(ExplainKey.UNADJUSTED_START_DATE).get(), START_UNADJ);
assertEquals(explain.get(ExplainKey.END_DATE).get(), END);
assertEquals(explain.get(ExplainKey.UNADJUSTED_END_DATE).get(), END_UNADJ);
assertEquals(explain.get(ExplainKey.DAYS).get().intValue(), (int) DAYS.between(START_UNADJ, END_UNADJ));
assertEquals(explain.get(ExplainKey.DISCOUNT_FACTOR).get(), ICDF_BEFORE_START.discountFactor(END));
assertEquals(explain.get(ExplainKey.FORECAST_VALUE).get().getAmount(),
PRICER.forecastValue(PERIOD_INTERP, IRP_BEFORE_START), NOTIONAL * TOL);
assertEquals(
explain.get(ExplainKey.PRESENT_VALUE).get().getAmount(),
PRICER.presentValueWithZSpread(
PERIOD_INTERP, IRP_BEFORE_START, ICDF_BEFORE_START, Z_SPREAD, PERIODIC, PERIOD_PER_YEAR),
NOTIONAL * TOL);
}