@Test public void testPlusMultiCurve() { // Add multi-curve final InterestRateCurveSensitivity sensitivity1 = new InterestRateCurveSensitivity(SENSITIVITY_11); final InterestRateCurveSensitivity sensitivity2 = new InterestRateCurveSensitivity(SENSITIVITY_12); final InterestRateCurveSensitivity sensitivity3 = new InterestRateCurveSensitivity(SENSITIVITY_22); final InterestRateCurveSensitivity sensitivity4 = new InterestRateCurveSensitivity(SENSITIVITY_33); final List<DoublesPair> list = new ArrayList<>(); list.addAll(SENSITIVITY_DATA_1); list.addAll(SENSITIVITY_DATA_2); final Map<String, List<DoublesPair>> map = new HashMap<>(); map.put(CURVE_NAME_1, list); map.put(CURVE_NAME_2, SENSITIVITY_DATA_2); map.put(CURVE_NAME_3, SENSITIVITY_DATA_3); final InterestRateCurveSensitivity expected = new InterestRateCurveSensitivity(map); InterestRateCurveSensitivity actual = sensitivity1.plus(sensitivity2).plus(sensitivity3).plus(sensitivity4); assertEquals(expected, actual); actual = sensitivity1 .plus(CURVE_NAME_1, SENSITIVITY_DATA_2) .plus(CURVE_NAME_2, SENSITIVITY_DATA_2) .plus(CURVE_NAME_3, SENSITIVITY_DATA_3); assertEquals(expected, actual); }
@Test public void testTotalSensitivity() { final InterestRateCurveSensitivity sensitivity1 = new InterestRateCurveSensitivity(SENSITIVITY_11); final InterestRateCurveSensitivity sensitivity2 = new InterestRateCurveSensitivity(SENSITIVITY_12); final InterestRateCurveSensitivity sensitivity3 = new InterestRateCurveSensitivity(SENSITIVITY_22); final InterestRateCurveSensitivity sensitivity4 = new InterestRateCurveSensitivity(SENSITIVITY_33); final double actual = sensitivity1.plus(sensitivity2).plus(sensitivity3).plus(sensitivity4).totalSensitivity(); final double expected = 400; assertEquals(expected, actual); }
@Test public void testPlusDifferentCurves() { // Simple add final InterestRateCurveSensitivity sensitivity1 = new InterestRateCurveSensitivity(SENSITIVITY_11); final InterestRateCurveSensitivity sensitivity2 = new InterestRateCurveSensitivity(SENSITIVITY_22); final Map<String, List<DoublesPair>> map = new HashMap<>(); map.put(CURVE_NAME_1, SENSITIVITY_DATA_1); map.put(CURVE_NAME_2, SENSITIVITY_DATA_2); final InterestRateCurveSensitivity expected = new InterestRateCurveSensitivity(map); InterestRateCurveSensitivity actual = sensitivity1.plus(sensitivity2); assertFalse(sensitivity1 == actual); assertFalse(sensitivity2 == actual); assertEquals(expected, actual); actual = sensitivity1.plus(CURVE_NAME_2, SENSITIVITY_DATA_2); assertEquals(expected, actual); }
private void assertIRCSEquals( final InterestRateCurveSensitivity expected, final InterestRateCurveSensitivity actual) { final Iterator<Map.Entry<String, List<DoublesPair>>> expectedIterator = new TreeMap<>(expected.getSensitivities()).entrySet().iterator(); final Iterator<Map.Entry<String, List<DoublesPair>>> actualIterator = new TreeMap<>(actual.getSensitivities()).entrySet().iterator(); do { final Map.Entry<String, List<DoublesPair>> expectedEntry = expectedIterator.next(); final Map.Entry<String, List<DoublesPair>> actualEntry = actualIterator.next(); assertEquals(expectedEntry.getKey(), actualEntry.getKey()); assertEquals(expectedEntry.getValue().size(), actualEntry.getValue().size()); for (int i = 0; i < expectedEntry.getValue().size(); i++) { final DoublesPair expectedPair = expectedEntry.getValue().get(i); final DoublesPair actualPair = actualEntry.getValue().get(i); assertEquals(expectedPair.getFirst(), actualPair.getFirst(), EPS); assertEquals(expectedPair.getSecond(), actualPair.getSecond(), EPS); } } while (expectedIterator.hasNext() && actualIterator.hasNext()); }
@Test public void testPlusSameCurves() { // Add on the same curve final InterestRateCurveSensitivity sensitivity1 = new InterestRateCurveSensitivity(SENSITIVITY_11); final InterestRateCurveSensitivity sensitivity2 = new InterestRateCurveSensitivity(SENSITIVITY_12); final List<DoublesPair> data = new ArrayList<>(); data.addAll(SENSITIVITY_DATA_1); data.addAll(SENSITIVITY_DATA_2); final Map<String, List<DoublesPair>> map = new HashMap<>(); map.put(CURVE_NAME_1, data); final InterestRateCurveSensitivity expected = new InterestRateCurveSensitivity(map); InterestRateCurveSensitivity actual = sensitivity1.plus(sensitivity2); assertFalse(sensitivity1 == actual); assertFalse(sensitivity2 == actual); assertEquals(expected, actual); actual = sensitivity1.plus(CURVE_NAME_1, SENSITIVITY_DATA_2); assertEquals(expected, actual); }
@Test public void testTotalSensitivityByCurve() { final InterestRateCurveSensitivity sensitivity1 = new InterestRateCurveSensitivity(SENSITIVITY_11); final InterestRateCurveSensitivity sensitivity2 = new InterestRateCurveSensitivity(SENSITIVITY_12); final InterestRateCurveSensitivity sensitivity3 = new InterestRateCurveSensitivity(SENSITIVITY_22); final InterestRateCurveSensitivity sensitivity4 = new InterestRateCurveSensitivity(SENSITIVITY_33); final Map<String, Double> actual = sensitivity1 .plus(sensitivity2) .plus(sensitivity3) .plus(sensitivity4) .totalSensitivityByCurve(); final Map<String, Double> expected = new HashMap<>(); expected.put(CURVE_NAME_1, 200.); expected.put(CURVE_NAME_2, 100.); expected.put(CURVE_NAME_3, 100.); assertEquals(expected, actual); }
@Test public void testCleanDifferentCurves() { final InterestRateCurveSensitivity sensitivity1 = new InterestRateCurveSensitivity(SENSITIVITY_11); final InterestRateCurveSensitivity sensitivity2 = new InterestRateCurveSensitivity(SENSITIVITY_22); final Map<String, List<DoublesPair>> map = new HashMap<>(); map.put(CURVE_NAME_1, SENSITIVITY_DATA_1); map.put(CURVE_NAME_2, SENSITIVITY_DATA_2); final InterestRateCurveSensitivity expected = new InterestRateCurveSensitivity(map); final InterestRateCurveSensitivity actualUncleaned = sensitivity1.plus(sensitivity2); final InterestRateCurveSensitivity actual = actualUncleaned.cleaned(); assertFalse(actualUncleaned == actual); assertFalse(actualUncleaned.getSensitivities() == actual.getSensitivities()); assertEquals(expected, actual); assertEquals(actualUncleaned, actual); }
@Test public void testCleanSameCurves() { final InterestRateCurveSensitivity sensitivity1 = new InterestRateCurveSensitivity(SENSITIVITY_11); final InterestRateCurveSensitivity sensitivity2 = new InterestRateCurveSensitivity(SENSITIVITY_12); final List<DoublesPair> list = Arrays.asList( new DoublesPair[] { DoublesPair.of(1d, 50d), DoublesPair.of(2d, 50d), DoublesPair.of(3d, 50d), DoublesPair.of(4d, 50d) }); final Map<String, List<DoublesPair>> map = new HashMap<>(); map.put(CURVE_NAME_1, list); final InterestRateCurveSensitivity expected = new InterestRateCurveSensitivity(map); final InterestRateCurveSensitivity actualUncleaned = sensitivity1.plus(sensitivity2); final InterestRateCurveSensitivity actual = actualUncleaned.cleaned(); assertFalse(actualUncleaned == actual); assertFalse(actualUncleaned.getSensitivities() == actual.getSensitivities()); assertEquals(expected, actual); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNullSensitivities() { InterestRateCurveSensitivity.of("Name", null); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNullCurveName() { InterestRateCurveSensitivity.of(null, SENSITIVITY_DATA_1); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNullSensitivity2() { InterestRateCurveSensitivity.of(CURVE_NAME_1, null); }
@Test public void testCleanSameCurvesWithRelativeTolerance1() { final double eps = 1e-3; final double eps2 = 5e-4; final InterestRateCurveSensitivity sensitivity1 = new InterestRateCurveSensitivity(SENSITIVITY_11); final List<DoublesPair> fuzzyList = Arrays.asList( new DoublesPair[] { DoublesPair.of(1d, -10d - 10 * eps2), DoublesPair.of(2d, 30d), DoublesPair.of(3d, -30d + 30 * eps2), DoublesPair.of(4d, 10d) }); List<DoublesPair> expectedList = Arrays.asList(new DoublesPair[] {DoublesPair.of(2d, 50d), DoublesPair.of(4d, 50d)}); Map<String, List<DoublesPair>> expectedMap = new HashMap<>(); expectedMap.put(CURVE_NAME_1, expectedList); final Map<String, List<DoublesPair>> fuzzyMap = new HashMap<>(); fuzzyMap.put(CURVE_NAME_1, fuzzyList); final InterestRateCurveSensitivity fuzzySensitivity = new InterestRateCurveSensitivity(fuzzyMap); InterestRateCurveSensitivity expected = new InterestRateCurveSensitivity(expectedMap); final InterestRateCurveSensitivity actualUncleaned = sensitivity1.plus(fuzzySensitivity); InterestRateCurveSensitivity actual = actualUncleaned.cleaned(eps, eps / 10); assertFalse(actualUncleaned == actual); assertFalse(actualUncleaned.getSensitivities() == actual.getSensitivities()); assertEquals(expected, actual); expectedList = Arrays.asList( new DoublesPair[] { DoublesPair.of(1d, -10d * eps2), DoublesPair.of(2d, 50d), DoublesPair.of(3d, 30d * eps2), DoublesPair.of(4d, 50d) }); expectedMap = new HashMap<>(); expectedMap.put(CURVE_NAME_1, expectedList); expected = new InterestRateCurveSensitivity(expectedMap); actual = actualUncleaned.cleaned(eps / 100, eps / 10); assertEquals(expected.getSensitivities().size(), actual.getSensitivities().size()); assertIRCSEquals(expected, actual); }
@Test public void testMultiply() { final InterestRateCurveSensitivity sensitivity1 = new InterestRateCurveSensitivity(SENSITIVITY_11); final InterestRateCurveSensitivity sensitivity2 = new InterestRateCurveSensitivity(SENSITIVITY_12); final InterestRateCurveSensitivity sensitivity3 = new InterestRateCurveSensitivity(SENSITIVITY_22); final InterestRateCurveSensitivity sensitivity4 = new InterestRateCurveSensitivity(SENSITIVITY_33); final double factor = Math.random() - 1; final List<DoublesPair> list1 = new ArrayList<>(); final List<DoublesPair> list2 = new ArrayList<>(); final List<DoublesPair> list3 = new ArrayList<>(); for (final DoublesPair pair : SENSITIVITY_DATA_1) { list1.add(DoublesPair.of(pair.getFirst(), pair.getSecond() * factor)); } for (final DoublesPair pair : SENSITIVITY_DATA_2) { final DoublesPair scaledPair = DoublesPair.of(pair.getFirst(), pair.getSecond() * factor); list1.add(scaledPair); list2.add(scaledPair); } for (final DoublesPair pair : SENSITIVITY_DATA_3) { list3.add(DoublesPair.of(pair.getFirst(), pair.getSecond() * factor)); } final Map<String, List<DoublesPair>> map = new HashMap<>(); map.put(CURVE_NAME_1, list1); map.put(CURVE_NAME_2, list2); map.put(CURVE_NAME_3, list3); final InterestRateCurveSensitivity expected = new InterestRateCurveSensitivity(map); final InterestRateCurveSensitivity actualUnscaled = sensitivity1.plus(sensitivity2).plus(sensitivity3).plus(sensitivity4); InterestRateCurveSensitivity actual = actualUnscaled.multipliedBy(factor); assertFalse(actualUnscaled == actual); assertFalse(actualUnscaled.getSensitivities() == actual.getSensitivities()); assertEquals(expected, actual); actual = sensitivity1 .multipliedBy(factor) .plus(sensitivity2.multipliedBy(factor)) .plus(sensitivity3.multipliedBy(factor)) .plus(sensitivity4.multipliedBy(factor)); assertEquals(expected, actual); }
@Test public void testObject() { final Map<String, List<DoublesPair>> map = Maps.newHashMap(SENSITIVITY_11); InterestRateCurveSensitivity sensitivities = new InterestRateCurveSensitivity(map); map.put("DUMMY", SENSITIVITY_DATA_3); assertFalse(sensitivities.getSensitivities().equals(map)); sensitivities = new InterestRateCurveSensitivity(SENSITIVITY_11); assertEquals(SENSITIVITY_11.keySet(), sensitivities.getCurves()); assertEquals(SENSITIVITY_11, sensitivities.getSensitivities()); InterestRateCurveSensitivity other = new InterestRateCurveSensitivity(SENSITIVITY_11); assertEquals(sensitivities.hashCode(), other.hashCode()); assertEquals(sensitivities, other); other = InterestRateCurveSensitivity.of(CURVE_NAME_1, SENSITIVITY_DATA_1); assertEquals(sensitivities, other); assertFalse( SENSITIVITY_11 == new InterestRateCurveSensitivity(SENSITIVITY_11).getSensitivities()); assertFalse(sensitivities.equals(new InterestRateCurveSensitivity(SENSITIVITY_12))); other = new InterestRateCurveSensitivity(); assertTrue(other.getCurves().isEmpty()); assertTrue(other.getSensitivities().isEmpty()); other = new InterestRateCurveSensitivity(SENSITIVITY_11); assertEquals(sensitivities, other); }