/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.forex.method;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertTrue;
import org.testng.annotations.Test;
import com.opengamma.analytics.math.matrix.DoubleMatrix1D;
import com.opengamma.analytics.math.matrix.DoubleMatrix2D;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.tuple.ObjectsPair;
import com.opengamma.util.tuple.Pair;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class PresentValueVolatilityNodeSensitivityDataBundleTest {
private static final Currency CUR_1 = Currency.EUR;
private static final Currency CUR_2 = Currency.EUR;
private static final Currency CUR_3 = Currency.GBP;
private static final int NB_EXPIRY = 4;
private static final int NB_STRIKE = 5;
private static final double[] EXPIRIES = new double[NB_EXPIRY];
private static final double[] STRIKES = new double[NB_STRIKE];
private static final double[][] VEGA = new double[NB_EXPIRY][NB_STRIKE];
static {
for (int i = 0; i < NB_EXPIRY; i++) {
EXPIRIES[i] = i;
for (int j = 0; j < NB_STRIKE; j++) {
if (j == 0) {
STRIKES[j] = 10 * j;
}
VEGA[i][j] = Math.random();
}
}
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullCurrency1() {
new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(null, CUR_2, NB_EXPIRY, NB_STRIKE);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullCurrency2() {
new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, null, NB_EXPIRY, NB_STRIKE);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNegativeExpiries() {
new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, -NB_STRIKE, NB_EXPIRY);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNegativeStrikes() {
new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, NB_EXPIRY, -NB_STRIKE);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullCurrency3() {
new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(null, CUR_2, new DoubleMatrix1D(EXPIRIES), new DoubleMatrix1D(STRIKES), new DoubleMatrix2D(VEGA));
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullCurrency4() {
new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, null, new DoubleMatrix1D(EXPIRIES), new DoubleMatrix1D(STRIKES), new DoubleMatrix2D(VEGA));
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullExpiries() {
new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, null, new DoubleMatrix1D(STRIKES), new DoubleMatrix2D(VEGA));
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullStrikes() {
new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, new DoubleMatrix1D(EXPIRIES), null, new DoubleMatrix2D(VEGA));
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullVega() {
new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, new DoubleMatrix1D(EXPIRIES), new DoubleMatrix1D(STRIKES), null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testWrongExpiriesNumber() {
new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, new DoubleMatrix1D(new double[] {1, 2}), new DoubleMatrix1D(STRIKES), new DoubleMatrix2D(VEGA));
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testWrongStrikesNumber() {
new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, new DoubleMatrix1D(EXPIRIES), new DoubleMatrix1D(new double[] {1, 2}), new DoubleMatrix2D(VEGA));
}
@Test
/**
* Tests the currency pair and matrix getters.
*/
public void getter() {
final Pair<Currency, Currency> pair = ObjectsPair.of(CUR_1, CUR_2);
final DoubleMatrix1D expiries = new DoubleMatrix1D(EXPIRIES);
final DoubleMatrix1D strikes = new DoubleMatrix1D(STRIKES);
final DoubleMatrix2D vega = new DoubleMatrix2D(VEGA);
final PresentValueForexBlackVolatilityNodeSensitivityDataBundle nodeSensi = new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, expiries, strikes, vega);
assertEquals("Currency pair", pair, nodeSensi.getCurrencyPair());
assertEquals("Expiries", expiries, nodeSensi.getExpiries());
assertEquals("Strikes", strikes, nodeSensi.getDelta());
assertEquals("Vega", vega, nodeSensi.getVega());
}
@Test
/**
* Tests the constructors.
*/
public void constructor() {
final DoubleMatrix2D vega = new DoubleMatrix2D(NB_EXPIRY, NB_STRIKE);
final DoubleMatrix1D expiries = new DoubleMatrix1D(new double[NB_EXPIRY]);
final DoubleMatrix1D strikes = new DoubleMatrix1D(new double[NB_STRIKE]);
final PresentValueForexBlackVolatilityNodeSensitivityDataBundle sensi1 = new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, expiries, strikes, vega);
final PresentValueForexBlackVolatilityNodeSensitivityDataBundle sensi2 = new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, NB_EXPIRY, NB_STRIKE);
assertTrue(sensi1.equals(sensi2));
}
@Test
/**
* Tests the equal and hash-code methods.
*/
public void equalHash() {
final DoubleMatrix1D expiries = new DoubleMatrix1D(EXPIRIES);
final DoubleMatrix1D strikes = new DoubleMatrix1D(STRIKES);
final DoubleMatrix2D vega = new DoubleMatrix2D(VEGA);
final PresentValueForexBlackVolatilityNodeSensitivityDataBundle sensi = new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, expiries, strikes, vega);
assertTrue(sensi.equals(sensi));
PresentValueForexBlackVolatilityNodeSensitivityDataBundle other = new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, expiries, strikes, vega);
assertTrue(other.equals(sensi));
assertEquals(other.hashCode(), sensi.hashCode());
final DoubleMatrix2D vegaModified = new DoubleMatrix2D(VEGA);
vegaModified.getData()[0][1] = vegaModified.getData()[0][1] * 1000;
other = new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, expiries, strikes, vegaModified);
assertFalse(other.equals(sensi));
final DoubleMatrix1D expiriesModified = new DoubleMatrix1D(new double[] {5, 6, 7, 8});
other = new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, expiriesModified, strikes, vega);
assertFalse(other.equals(sensi));
final DoubleMatrix1D strikesModified = new DoubleMatrix1D(new double[] {5, 6, 7, 8, 9});
other = new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_2, expiries, strikesModified, vega);
assertFalse(other.equals(sensi));
other = new PresentValueForexBlackVolatilityNodeSensitivityDataBundle(CUR_1, CUR_3, expiries, strikes, vega);
assertFalse(other.equals(sensi));
assertFalse(other.equals(CUR_1));
assertFalse(other.equals(null));
}
}