/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.greeks;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;
import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
import org.testng.annotations.Test;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.tuple.Pair;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class BucketedGreekResultCollectionTest {
private static final double[] EXPIRIES = new double[] {1, 5, 10, 20};
private static final double[][] STRIKES = new double[][] {
new double[] {1.1, 1.2, 1.3},
new double[] {1.1, 1.2, 1.3},
new double[] {1.1, 1.2},
new double[] {1.1, 1.2, 1.3}
};
private static final double[][] VEGA = new double[][] {
new double[] {0.1, 0.2, 0.3},
new double[] {10.1, 10.2, 10.3},
new double[] {20.1, 20.2},
new double[] {30.1, 30.2, 30.3}
};
private static final BucketedGreekResultCollection RESULTS = new BucketedGreekResultCollection(EXPIRIES, STRIKES);
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullStrikes() {
new BucketedGreekResultCollection(EXPIRIES, null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullExpiries() {
new BucketedGreekResultCollection(null, STRIKES);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testPutNullGreek() {
RESULTS.put(null, VEGA);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testWrongStrikeNumber1() {
final double[][] result = new double[][] {
new double[] {0.1, 0.2, 0.3},
};
RESULTS.put(BucketedGreekResultCollection.BUCKETED_VEGA, result);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testWrongStrikeNumber2() {
final double[][] result = new double[][] {
new double[] {0.1, 0.2, 0.3},
new double[] {10.1, 10.2, 10.3},
new double[] {20.1, 20.2, 20.3},
new double[] {30.1, 30.2, 30.3}
};
RESULTS.put(BucketedGreekResultCollection.BUCKETED_VEGA, result);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testWrongExpiryNumber() {
final double[][] result = new double[][] {
new double[] {0.1, 0.2, 0.3, 0.4},
new double[] {10.1, 10.2, 10.3, 10.4},
new double[] {20.1, 20.2, 20.3, 20.4},
new double[] {30.1, 30.2, 30.3, 30.4}
};
RESULTS.put(BucketedGreekResultCollection.BUCKETED_VEGA, result);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNonRectangular() {
final double[][] result = new double[][] {
new double[] {0.1, 0.2, 0.3},
new double[] {10.1, 10.2},
new double[] {20.1, 20.2, 20.3},
new double[] {30.1, 30.2, 30.3}
};
RESULTS.put(BucketedGreekResultCollection.BUCKETED_VEGA, result);
}
@Test(expectedExceptions = UnsupportedOperationException.class)
public void testUnmodifiableKeys() {
final BucketedGreekResultCollection results = new BucketedGreekResultCollection(EXPIRIES, STRIKES);
results.put(BucketedGreekResultCollection.BUCKETED_VEGA, VEGA);
final Set<Greek> keys = results.keySet();
keys.add(BucketedGreekResultCollection.BUCKETED_VEGA);
}
@Test(expectedExceptions = UnsupportedOperationException.class)
public void testUnmodifiableValues() {
final BucketedGreekResultCollection results = new BucketedGreekResultCollection(EXPIRIES, STRIKES);
results.put(BucketedGreekResultCollection.BUCKETED_VEGA, VEGA);
final Collection<double[][]> values = results.values();
values.add(VEGA);
}
@Test(expectedExceptions = UnsupportedOperationException.class)
public void testRemove() {
final BucketedGreekResultCollection results = new BucketedGreekResultCollection(EXPIRIES, STRIKES);
final Iterator<Pair<Greek, double[][]>> iter = results.iterator();
iter.remove();
}
@Test
public void testObject() {
final BucketedGreekResultCollection results = new BucketedGreekResultCollection(EXPIRIES, STRIKES);
for (int i = 0; i < STRIKES.length; i++) {
assertArrayEquals(STRIKES[i], results.getStrikes()[i], 0);
}
assertArrayEquals(EXPIRIES, results.getExpiries(), 0);
BucketedGreekResultCollection other = new BucketedGreekResultCollection(EXPIRIES, STRIKES);
assertEquals(results, other);
assertEquals(results.hashCode(), other.hashCode());
final double[][] strikes = new double[][] {
new double[] {1.1, 1.2, 1.4},
new double[] {1.1, 1.2, 1.3},
new double[] {1.1, 1.2},
new double[] {1.1, 1.2, 1.3}
};
other = new BucketedGreekResultCollection(EXPIRIES, strikes);
assertFalse(results.equals(other));
other = new BucketedGreekResultCollection(new double[] {1, 5, 10, 15}, STRIKES);
assertFalse(results.equals(other));
other = new BucketedGreekResultCollection(EXPIRIES, STRIKES);
results.put(BucketedGreekResultCollection.BUCKETED_VEGA, VEGA);
assertFalse(results.equals(other));
other.put(BucketedGreekResultCollection.BUCKETED_VEGA, VEGA);
assertEquals(results, other);
assertEquals(results.hashCode(), other.hashCode());
assertTrue(results.contains(BucketedGreekResultCollection.BUCKETED_VEGA));
assertEquals(1, results.size());
for (int i = 0; i < VEGA.length; i++) {
assertArrayEquals(VEGA[i], results.getBucketedGreeks(BucketedGreekResultCollection.BUCKETED_VEGA)[i], 0);
}
assertNull(results.getBucketedGreeks(Greek.CARRY_RHO));
final Iterator<Pair<Greek, double[][]>> resultIter = results.iterator();
final Iterator<Greek> dataIter = results.keySet().iterator();
while (resultIter.hasNext()) {
final Pair<Greek, double[][]> pair = resultIter.next();
assertTrue(results.keySet().contains(pair.getFirst()));
assertEquals(pair.getFirst(), dataIter.next());
}
assertFalse(dataIter.hasNext());
}
}