@Test
/**
* Tests the comparison with the other implementation. This test may be removed when only one version remains.
*/
public void comparison() {
final AnalyticOptionModel<EuropeanStandardBarrierOptionDefinition, StandardOptionDataBundle> model = new EuropeanStandardBarrierOptionModel();
final StandardOptionDataBundle data = new StandardOptionDataBundle(YieldCurve.from(ConstantDoublesCurve.from(RATE_DOM)), COST_OF_CARRY, new VolatilitySurface(
ConstantDoublesSurface.from(VOLATILITY)),
SPOT, REFERENCE_DATE);
final Expiry expiry = new Expiry(EXPIRY_DATE);
final double priceDI1 = BARRIER_FUNCTION.getPrice(VANILLA_CALL_K100, BARRIER_DOWN_IN, REBATE, SPOT, COST_OF_CARRY, RATE_DOM, VOLATILITY);
final EuropeanStandardBarrierOptionDefinition optionBarrierDI = new EuropeanStandardBarrierOptionDefinition(STRIKE_MID, expiry, IS_CALL, BARRIER_DOWN_IN, REBATE);
final double priceDI2 = model.getPricingFunction(optionBarrierDI).evaluate(data);
assertEquals("Comparison Down In", priceDI2, priceDI1, 1.0E-10);
final double priceDO1 = BARRIER_FUNCTION.getPrice(VANILLA_CALL_K100, BARRIER_DOWN_OUT, REBATE, SPOT, COST_OF_CARRY, RATE_DOM, VOLATILITY);
final EuropeanStandardBarrierOptionDefinition optionBarrierDO = new EuropeanStandardBarrierOptionDefinition(STRIKE_MID, expiry, IS_CALL, BARRIER_DOWN_OUT, REBATE);
final double priceDO2 = model.getPricingFunction(optionBarrierDO).evaluate(data);
assertEquals("Comparison Down Out", priceDO2, priceDO1, 1.0E-10);
final double priceUI1 = BARRIER_FUNCTION.getPrice(VANILLA_CALL_K100, BARRIER_UP_IN, REBATE, SPOT, COST_OF_CARRY, RATE_DOM, VOLATILITY);
final EuropeanStandardBarrierOptionDefinition optionBarrierUI = new EuropeanStandardBarrierOptionDefinition(STRIKE_MID, expiry, IS_CALL, BARRIER_UP_IN, REBATE);
final double priceUI2 = model.getPricingFunction(optionBarrierUI).evaluate(data);
assertEquals("Comparison Up In", priceUI2, priceUI1, 1.0E-10);
final double priceUO1 = BARRIER_FUNCTION.getPrice(VANILLA_CALL_K100, BARRIER_UP_OUT, REBATE, SPOT, COST_OF_CARRY, RATE_DOM, VOLATILITY);
final EuropeanStandardBarrierOptionDefinition optionBarrierUO = new EuropeanStandardBarrierOptionDefinition(STRIKE_MID, expiry, IS_CALL, BARRIER_UP_OUT, REBATE);
final double priceUO2 = model.getPricingFunction(optionBarrierUO).evaluate(data);
assertEquals("Comparison Up Out", priceUO2, priceUO1, 1.0E-10);
final double vol0 = 0.0;
final double priceVol01 = BARRIER_FUNCTION.getPrice(VANILLA_CALL_K100, BARRIER_DOWN_IN, REBATE, SPOT, COST_OF_CARRY, RATE_DOM, vol0);
final StandardOptionDataBundle data0 = new StandardOptionDataBundle(YieldCurve.from(ConstantDoublesCurve.from(RATE_DOM)), COST_OF_CARRY, new VolatilitySurface(ConstantDoublesSurface.from(vol0)),
SPOT,
REFERENCE_DATE);
final double priceVol02 = model.getPricingFunction(optionBarrierDI).evaluate(data0);
assertEquals(priceVol02, priceVol01, 1.0E-10);
}