public void test_explainPresentValueWithSpread() {
ExplainMapBuilder builder = ExplainMap.builder();
PRICER.explainPresentValueWithSpread(
PAYMENT_PERIOD, ISSUER_CURVE, builder, Z_SPREAD, PERIODIC, PERIOD_PER_YEAR);
ExplainMap explain = builder.build();
assertEquals(explain.get(ExplainKey.ENTRY_TYPE).get(), "FixedCouponBondPaymentPeriod");
assertEquals(explain.get(ExplainKey.PAYMENT_DATE).get(), PAYMENT_PERIOD.getPaymentDate());
assertEquals(explain.get(ExplainKey.PAYMENT_CURRENCY).get(), PAYMENT_PERIOD.getCurrency());
assertEquals(explain.get(ExplainKey.START_DATE).get(), START_ADJUSTED);
assertEquals(explain.get(ExplainKey.UNADJUSTED_START_DATE).get(), START);
assertEquals(explain.get(ExplainKey.END_DATE).get(), END_ADJUSTED);
assertEquals(explain.get(ExplainKey.UNADJUSTED_END_DATE).get(), END);
assertEquals(explain.get(ExplainKey.DAYS).get().intValue(), (int) DAYS.between(START_ADJUSTED, END_ADJUSTED));
assertEquals(explain.get(ExplainKey.DISCOUNT_FACTOR).get(),
DSC_FACTORS.discountFactorWithSpread(END_ADJUSTED, Z_SPREAD, PERIODIC, PERIOD_PER_YEAR));
assertEquals(explain.get(ExplainKey.FORECAST_VALUE).get().getAmount(),
FIXED_RATE * NOTIONAL * YEAR_FRACTION, NOTIONAL * TOL);
assertEquals(explain.get(ExplainKey.PRESENT_VALUE).get().getAmount(), FIXED_RATE * NOTIONAL * YEAR_FRACTION *
DSC_FACTORS.discountFactorWithSpread(END_ADJUSTED, Z_SPREAD, PERIODIC, PERIOD_PER_YEAR),
NOTIONAL * TOL);
}