/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.model.volatility.smile.fitting.interpolation; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertTrue; import org.testng.annotations.Test; import com.opengamma.analytics.financial.model.volatility.smile.function.SABRFormulaData; import com.opengamma.analytics.financial.model.volatility.smile.function.SABRHaganVolatilityFunction; import com.opengamma.util.test.TestGroup; /** * Test class for {@link SmileExtrapolationFunctionSABRProvider} and its subclasses. * As these classes should be used with {@link SmileInterpolatorSABRWithExtrapolation}, * nontrivial tests are in {@link SmileInterpolatorSABRWithExtrapolationTest}. */ @SuppressWarnings("unused") @Test(groups = TestGroup.UNIT) public class SmileExtrapolationFunctionSABRProviderTest { private static final BenaimDodgsonKainthExtrapolationFunctionProvider DEFAULT_BDK_PROVIDER = new BenaimDodgsonKainthExtrapolationFunctionProvider( 1.5, 2.0); private static final ShiftedLogNormalExtrapolationFunctionProvider DEFAULT_SLN_PROVIDER_EXC = new ShiftedLogNormalExtrapolationFunctionProvider( "Exception"); private static final ShiftedLogNormalExtrapolationFunctionProvider DEFAULT_SLN_PROVIDER_QUI = new ShiftedLogNormalExtrapolationFunctionProvider( "Quiet"); private static final SABRFormulaData SAMPLE_SABR_DATA = new SABRFormulaData(0.5, 1.0, 0.65, 0.35); private static final double SAMPLE_FORWARD = 1.1; private static final double SAMPLE_EXPIRY = 1.5; /** * */ @Test public void hashCodeAndEqualsErrorBDKTest() { BenaimDodgsonKainthExtrapolationFunctionProvider provider1 = new BenaimDodgsonKainthExtrapolationFunctionProvider( 2.0, 3.5); BenaimDodgsonKainthExtrapolationFunctionProvider provider2 = new BenaimDodgsonKainthExtrapolationFunctionProvider( 2.0, 1.5); BenaimDodgsonKainthExtrapolationFunctionProvider provider3 = new BenaimDodgsonKainthExtrapolationFunctionProvider( 1.0, 3.5); ShiftedLogNormalExtrapolationFunctionProvider provider4 = new ShiftedLogNormalExtrapolationFunctionProvider(); BenaimDodgsonKainthExtrapolationFunctionProvider provider5 = provider1; BenaimDodgsonKainthExtrapolationFunctionProvider provider6 = new BenaimDodgsonKainthExtrapolationFunctionProvider( 2.0, 3.5); assertTrue(provider1.equals(provider1)); assertTrue(provider1.equals(provider5)); assertTrue(provider5.equals(provider1)); assertTrue(provider1.hashCode() == provider5.hashCode()); assertTrue(provider1.equals(provider6)); assertTrue(provider6.equals(provider1)); assertTrue(provider1.hashCode() == provider6.hashCode()); assertFalse(provider1.hashCode() == provider2.hashCode()); assertFalse(provider1.equals(provider2)); assertFalse(provider2.equals(provider1)); assertFalse(provider1.hashCode() == provider3.hashCode()); assertFalse(provider1.equals(provider3)); assertFalse(provider3.equals(provider1)); assertFalse(provider1.hashCode() == provider4.hashCode()); assertFalse(provider1.equals(provider4)); assertFalse(provider4.equals(provider1)); assertFalse(provider1.equals(null)); } /** * */ @Test(expectedExceptions = IllegalArgumentException.class) public void negativeLeftMuBdkTest() { new BenaimDodgsonKainthExtrapolationFunctionProvider(-2.0, 3.5); } /** * */ @Test(expectedExceptions = IllegalArgumentException.class) public void negativeRightMuBdkTest() { new BenaimDodgsonKainthExtrapolationFunctionProvider(2.5, -10.0); } /** * */ @Test(expectedExceptions = IllegalArgumentException.class) public void negativeStrikeBdkTest() { DEFAULT_BDK_PROVIDER.getExtrapolationFunction(SAMPLE_SABR_DATA, SAMPLE_SABR_DATA, new SABRHaganVolatilityFunction(), SAMPLE_FORWARD, SAMPLE_EXPIRY, -0.7 * SAMPLE_FORWARD, 1.5 * SAMPLE_FORWARD); } /** * */ @Test(expectedExceptions = IllegalArgumentException.class) public void lowerUpperStrikeBdkTest() { DEFAULT_BDK_PROVIDER.getExtrapolationFunction(SAMPLE_SABR_DATA, SAMPLE_SABR_DATA, new SABRHaganVolatilityFunction(), SAMPLE_FORWARD, SAMPLE_EXPIRY, 0.7 * SAMPLE_FORWARD, -1.5 * SAMPLE_FORWARD); } /** * */ @Test public void hashCodeAndEqualsErrorSLNTest() { ShiftedLogNormalExtrapolationFunctionProvider provider1 = new ShiftedLogNormalExtrapolationFunctionProvider( "Exception"); ShiftedLogNormalExtrapolationFunctionProvider provider2 = new ShiftedLogNormalExtrapolationFunctionProvider("Flat"); ShiftedLogNormalExtrapolationFunctionProvider provider3 = new ShiftedLogNormalExtrapolationFunctionProvider("Quiet"); BenaimDodgsonKainthExtrapolationFunctionProvider provider4 = new BenaimDodgsonKainthExtrapolationFunctionProvider( 2.0, 3.0); ShiftedLogNormalExtrapolationFunctionProvider provider5 = provider1; ShiftedLogNormalExtrapolationFunctionProvider provider6 = new ShiftedLogNormalExtrapolationFunctionProvider( "Exception"); assertTrue(provider1.equals(provider1)); assertTrue(provider1.equals(provider5)); assertTrue(provider5.equals(provider1)); assertTrue(provider1.hashCode() == provider5.hashCode()); assertTrue(provider1.equals(provider6)); assertTrue(provider6.equals(provider1)); assertTrue(provider1.hashCode() == provider6.hashCode()); assertFalse(provider1.hashCode() == provider2.hashCode()); assertFalse(provider1.equals(provider2)); assertFalse(provider2.equals(provider1)); assertFalse(provider1.hashCode() == provider3.hashCode()); assertFalse(provider1.equals(provider3)); assertFalse(provider3.equals(provider1)); assertFalse(provider1.hashCode() == provider4.hashCode()); assertFalse(provider1.equals(provider4)); assertFalse(provider4.equals(provider1)); assertFalse(provider1.equals(null)); } /** * */ @Test(expectedExceptions = IllegalArgumentException.class) public void negativeStrikeSlnTest() { DEFAULT_SLN_PROVIDER_EXC.getExtrapolationFunction(SAMPLE_SABR_DATA, SAMPLE_SABR_DATA, new SABRHaganVolatilityFunction(), SAMPLE_FORWARD, SAMPLE_EXPIRY, -0.5 * SAMPLE_FORWARD, 1.5 * SAMPLE_FORWARD); } /** * */ @Test(expectedExceptions = IllegalArgumentException.class) public void largeLowerStrikeSlnTest() { DEFAULT_SLN_PROVIDER_EXC.getExtrapolationFunction(SAMPLE_SABR_DATA, SAMPLE_SABR_DATA, new SABRHaganVolatilityFunction(), SAMPLE_FORWARD, SAMPLE_EXPIRY, 1.01 * SAMPLE_FORWARD, 1.5 * SAMPLE_FORWARD); } /** * */ @Test(expectedExceptions = IllegalArgumentException.class) public void smallUpperStrikeSlnTest() { DEFAULT_SLN_PROVIDER_EXC.getExtrapolationFunction(SAMPLE_SABR_DATA, SAMPLE_SABR_DATA, new SABRHaganVolatilityFunction(), SAMPLE_FORWARD, SAMPLE_EXPIRY, 0.5 * SAMPLE_FORWARD, 0.99 * SAMPLE_FORWARD); } /** * */ @Test(expectedExceptions = IllegalArgumentException.class) public void nonBehaviourSlmTest() { ShiftedLogNormalExtrapolationFunctionProvider providerFail = new ShiftedLogNormalExtrapolationFunctionProvider( "None"); providerFail.getExtrapolationFunction(SAMPLE_SABR_DATA, SAMPLE_SABR_DATA, new SABRHaganVolatilityFunction(), SAMPLE_FORWARD, SAMPLE_EXPIRY, -0.5 * SAMPLE_FORWARD, 1.5 * SAMPLE_FORWARD); } }