/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.pricer.impl.volatility.smile;
import static com.opengamma.strata.collect.TestHelper.assertSerialization;
import static com.opengamma.strata.collect.TestHelper.assertThrowsIllegalArg;
import static com.opengamma.strata.collect.TestHelper.coverBeanEquals;
import static com.opengamma.strata.collect.TestHelper.coverImmutableBean;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import org.testng.annotations.Test;
/**
* Test {@link SabrFormulaData}.
*/
@Test
public class SabrFormulaDataTest {
private static final double NU = 0.8;
private static final double RHO = -0.65;
private static final double BETA = 0.76;
private static final double ALPHA = 1.4;
private static final SabrFormulaData DATA = SabrFormulaData.of(ALPHA, BETA, RHO, NU);
@Test
public void test() {
assertEquals(DATA.getAlpha(), ALPHA, 0);
assertEquals(DATA.getBeta(), BETA, 0);
assertEquals(DATA.getNu(), NU, 0);
assertEquals(DATA.getRho(), RHO, 0);
assertEquals(DATA.getParameter(0), ALPHA, 0);
assertEquals(DATA.getParameter(1), BETA, 0);
assertEquals(DATA.getParameter(2), RHO, 0);
assertEquals(DATA.getParameter(3), NU, 0);
assertEquals(DATA.getNumberOfParameters(), 4);
SabrFormulaData other = SabrFormulaData.of(new double[] {ALPHA, BETA, RHO, NU});
assertEquals(other, DATA);
assertEquals(other.hashCode(), DATA.hashCode());
other = other.with(0, ALPHA - 0.01);
assertFalse(other.equals(DATA));
other = SabrFormulaData.of(ALPHA, BETA * 0.5, RHO, NU);
assertFalse(other.equals(DATA));
other = SabrFormulaData.of(ALPHA, BETA, RHO, NU * 0.5);
assertFalse(other.equals(DATA));
other = SabrFormulaData.of(ALPHA, BETA, RHO * 0.5, NU);
assertFalse(other.equals(DATA));
}
//-------------------------------------------------------------------------
@Test
public void testNegativeBETA() {
assertThrowsIllegalArg(() -> SabrFormulaData.of(ALPHA, -BETA, RHO, NU));
}
@Test
public void testNegativeNu() {
assertThrowsIllegalArg(() -> SabrFormulaData.of(ALPHA, BETA, RHO, -NU));
}
@Test
public void testLowRho() {
assertThrowsIllegalArg(() -> SabrFormulaData.of(ALPHA, BETA, RHO - 10, NU));
}
@Test
public void testHighRho() {
assertThrowsIllegalArg(() -> SabrFormulaData.of(ALPHA, BETA, RHO + 10, NU));
}
@Test
public void testWrongIndex() {
assertThrowsIllegalArg(() -> DATA.isAllowed(-1, ALPHA));
}
@Test
public void testWrongParameterLength() {
assertThrowsIllegalArg(() -> SabrFormulaData.of(new double[] {ALPHA, BETA, RHO, NU, 0.1}));
}
//-------------------------------------------------------------------------
public void coverage() {
coverImmutableBean(DATA);
SabrFormulaData another = SabrFormulaData.of(1.2, 0.4, 0.0, 0.2);
coverBeanEquals(DATA, another);
}
public void test_serialization() {
assertSerialization(DATA);
}
}