/**
* Tests the strikes computations.
*/
public void strike() {
double[] strike = SMILE.getStrike(FORWARD);
BlackPriceFunction function = new BlackPriceFunction();
double[] volatility = SMILE.getVolatility();
int nbDelta = DELTA.length;
for (int loopdelta = 0; loopdelta < nbDelta; loopdelta++) {
BlackFunctionData dataPut = new BlackFunctionData(FORWARD, 1.0, volatility[loopdelta]);
EuropeanVanillaOption optionPut = new EuropeanVanillaOption(strike[loopdelta], TIME_TO_EXPIRY, false);
double[] dPut = function.getPriceAdjoint(optionPut, dataPut);
assertEquals("Strike: Put " + loopdelta, dPut[1], -DELTA[loopdelta], 1.0E-8);
BlackFunctionData dataCall = new BlackFunctionData(FORWARD, 1.0, volatility[2 * nbDelta - loopdelta]);
EuropeanVanillaOption optionCall = new EuropeanVanillaOption(strike[2 * nbDelta - loopdelta], TIME_TO_EXPIRY, true);
double[] dCall = function.getPriceAdjoint(optionCall, dataCall);
assertEquals("Strike: Call " + loopdelta, dCall[1], DELTA[loopdelta], 1.0E-8);
}
BlackFunctionData data = new BlackFunctionData(FORWARD, 1.0, volatility[nbDelta]);
EuropeanVanillaOption optionPut = new EuropeanVanillaOption(strike[nbDelta], TIME_TO_EXPIRY, false);
double[] dPut = function.getPriceAdjoint(optionPut, data);
EuropeanVanillaOption optionCall = new EuropeanVanillaOption(strike[nbDelta], TIME_TO_EXPIRY, true);
double[] dCall = function.getPriceAdjoint(optionCall, data);
assertEquals("Strike: ATM", dCall[1] + dPut[1], 0.0, 1.0E-8);
}