/**
* Copyright (C) 2016 - 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 SsviFormulaData}.
*/
@Test
public class SsviFormulaDataTest {
private static final double SIGMA = 0.20;
private static final double RHO = -0.20;
private static final double ETA = 0.50;
private static final SsviFormulaData DATA = SsviFormulaData.of(SIGMA, RHO, ETA);
@Test
public void test() {
assertEquals(DATA.getSigma(), SIGMA, 0);
assertEquals(DATA.getRho(), RHO, 0);
assertEquals(DATA.getEta(), ETA, 0);
assertEquals(DATA.getParameter(0), SIGMA, 0);
assertEquals(DATA.getParameter(1), RHO, 0);
assertEquals(DATA.getParameter(2), ETA, 0);
assertEquals(DATA.getNumberOfParameters(), 3);
SsviFormulaData other = SsviFormulaData.of(new double[] {SIGMA, RHO, ETA});
assertEquals(other, DATA);
assertEquals(other.hashCode(), DATA.hashCode());
other = other.with(0, SIGMA - 0.01);
assertFalse(other.equals(DATA));
other = SsviFormulaData.of(SIGMA * 0.5, RHO, ETA);
assertFalse(other.equals(DATA));
other = SsviFormulaData.of(SIGMA, RHO * 0.5, ETA);
assertFalse(other.equals(DATA));
}
//-------------------------------------------------------------------------
@Test
public void testNegativeEta() {
assertThrowsIllegalArg(() -> SsviFormulaData.of(SIGMA, RHO, -ETA));
}
@Test
public void testNegativeSigma() {
assertThrowsIllegalArg(() -> SsviFormulaData.of(-SIGMA, RHO, ETA));
}
@Test
public void testLowRho() {
assertThrowsIllegalArg(() -> SsviFormulaData.of(SIGMA, RHO - 10, ETA));
}
@Test
public void testHighRho() {
assertThrowsIllegalArg(() -> SsviFormulaData.of(SIGMA, RHO + 10, ETA));
}
@Test
public void testWrongIndex() {
assertThrowsIllegalArg(() -> DATA.isAllowed(-1, ETA));
}
@Test
public void testWrongParameterLength() {
assertThrowsIllegalArg(() -> SsviFormulaData.of(new double[] {ETA, RHO, SIGMA, 0.1}));
}
//-------------------------------------------------------------------------
public void coverage() {
coverImmutableBean(DATA);
SsviFormulaData another = SsviFormulaData.of(1.2, 0.4, 0.2);
coverBeanEquals(DATA, another);
}
public void test_serialization() {
assertSerialization(DATA);
}
}