package com.opengamma.analytics.financial.model.interestrate.definition;
import static org.testng.AssertJUnit.assertEquals;
import org.testng.annotations.Test;
import org.testng.internal.junit.ArrayAsserts;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class LiborMarketModelDisplacedDiffusionParametersTest {
// LMM
private static final int NB_PERIOD = 20; // %Y quarterly
private static final double[] TIME_IBOR = new double[NB_PERIOD + 1];
private static final double[] DELTA = new double[NB_PERIOD];
private static final double[][] VOL = new double[NB_PERIOD][2];
private static final double[] DISPLACEMENT = new double[NB_PERIOD];
static {
for (int loopperiod = 0; loopperiod <= NB_PERIOD; loopperiod++) {
TIME_IBOR[loopperiod] = 2.0 / 365.0 + loopperiod * 0.25;
}
for (int loopperiod = 0; loopperiod < NB_PERIOD; loopperiod++) {
DELTA[loopperiod] = 0.25;
DISPLACEMENT[loopperiod] = 0.10;
VOL[loopperiod][0] = 0.02;
VOL[loopperiod][1] = -0.02 + loopperiod * 0.002;
}
}
private static final double MEAN_REVERSION = 0.01;
private static final LiborMarketModelDisplacedDiffusionParameters PARAMETER_LMM = new LiborMarketModelDisplacedDiffusionParameters(TIME_IBOR, DELTA, DISPLACEMENT, VOL, MEAN_REVERSION);
@Test
/**
* Tests the class getters.
*/
public void getter() {
assertEquals("LMM getter", MEAN_REVERSION, PARAMETER_LMM.getMeanReversion());
ArrayAsserts.assertArrayEquals("LMM getter", DISPLACEMENT, PARAMETER_LMM.getDisplacement(), 1.0E-10);
ArrayAsserts.assertArrayEquals("LMM getter", DELTA, PARAMETER_LMM.getAccrualFactor(), 1.0E-10);
ArrayAsserts.assertArrayEquals("LMM getter", TIME_IBOR, PARAMETER_LMM.getIborTime(), 1.0E-10);
for (int loopperiod = 0; loopperiod < NB_PERIOD; loopperiod++) {
ArrayAsserts.assertArrayEquals("LMM getter", VOL[loopperiod], PARAMETER_LMM.getVolatility()[loopperiod], 1.0E-10);
}
}
@Test
/**
* Tests the class setters.
*/
public void setter() {
double[][] volReplaced = new double[][] { {0.01, 0.01}, {0.011, 0.009}, {0.012, 0.008}};
int indexStart = 10;
double[][] vol2 = new double[NB_PERIOD][2];
for (int loopperiod = 0; loopperiod < NB_PERIOD; loopperiod++) {
vol2[loopperiod][0] = 0.02;
vol2[loopperiod][1] = -0.02 + loopperiod * 0.002;
}
LiborMarketModelDisplacedDiffusionParameters parameterLmm = new LiborMarketModelDisplacedDiffusionParameters(TIME_IBOR, DELTA, DISPLACEMENT, vol2, MEAN_REVERSION);
parameterLmm.setVolatility(volReplaced, indexStart);
for (int loopperiod = 0; loopperiod < NB_PERIOD; loopperiod++) {
if (loopperiod >= indexStart && loopperiod < indexStart + volReplaced.length) { // Replaced vol
ArrayAsserts.assertArrayEquals("LMM getter", volReplaced[loopperiod - indexStart], parameterLmm.getVolatility()[loopperiod], 1.0E-10);
} else {// Original vol
ArrayAsserts.assertArrayEquals("LMM getter", VOL[loopperiod], parameterLmm.getVolatility()[loopperiod], 1.0E-10);
}
}
}
}