/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.fudgemsg; import static org.testng.AssertJUnit.assertEquals; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.testng.annotations.Test; import com.opengamma.analytics.financial.provider.curve.CurveBuildingBlock; import com.opengamma.analytics.financial.provider.curve.CurveBuildingBlockBundle; import com.opengamma.analytics.financial.provider.sensitivity.inflation.InflationSensitivity; import com.opengamma.analytics.financial.provider.sensitivity.inflation.MultipleCurrencyInflationSensitivity; import com.opengamma.analytics.financial.provider.sensitivity.multicurve.AnnuallyCompoundedForwardSensitivity; import com.opengamma.analytics.financial.provider.sensitivity.multicurve.ForwardSensitivity; import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MulticurveSensitivity; import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MultipleCurrencyMulticurveSensitivity; import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MultipleCurrencyParameterSensitivity; import com.opengamma.analytics.financial.provider.sensitivity.multicurve.SimpleParameterSensitivity; import com.opengamma.analytics.financial.provider.sensitivity.multicurve.SimplyCompoundedForwardSensitivity; 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.DoublesPair; import com.opengamma.util.tuple.Pair; import com.opengamma.util.tuple.Pairs; /** * Test. */ @Test(groups = TestGroup.UNIT) public class CurveResultBuildersTest extends AnalyticsTestBase { @Test public void testSimplyForwardSensitivity() { final SimplyCompoundedForwardSensitivity forwardSensitivity = new SimplyCompoundedForwardSensitivity(12., 13., 17., 25.); assertEquals(forwardSensitivity, cycleObject(SimplyCompoundedForwardSensitivity.class, forwardSensitivity)); } @Test public void testAnnuallyForwardSensitivity() { final AnnuallyCompoundedForwardSensitivity forwardSensitivity = new AnnuallyCompoundedForwardSensitivity(12., 13., 17., 25.); assertEquals(forwardSensitivity, cycleObject(AnnuallyCompoundedForwardSensitivity.class, forwardSensitivity)); } @Test public void testMulticurveSensitivity() { final String name1 = "YC1"; final String name2 = "YC2"; final Map<String, List<DoublesPair>> yieldCurveSensitivities = new HashMap<>(); yieldCurveSensitivities.put(name1, Arrays.asList(DoublesPair.of(1., 2.), DoublesPair.of(3.5, 6.8))); yieldCurveSensitivities.put(name2, Arrays.asList(DoublesPair.of(11., 12.), DoublesPair.of(13.5, 16.8), DoublesPair.of(45., 12.))); final Map<String, List<ForwardSensitivity>> forwardCurveSensitivities = new HashMap<>(); final ForwardSensitivity sensi1 = new SimplyCompoundedForwardSensitivity(1, 5, 0.25, 10); final ForwardSensitivity sensi2 = new SimplyCompoundedForwardSensitivity(2, 3, 0.215, 20); final ForwardSensitivity sensi3 = new SimplyCompoundedForwardSensitivity(3, 9, 0.225, 30); forwardCurveSensitivities.put(name1, Arrays.asList(sensi1, sensi2, sensi3)); final ForwardSensitivity sensi4 = new SimplyCompoundedForwardSensitivity(0.1, 4, 0.5, 10); forwardCurveSensitivities.put(name2, Arrays.asList(sensi4)); final MulticurveSensitivity sensitivities = MulticurveSensitivity.of(yieldCurveSensitivities, forwardCurveSensitivities); assertEquals(sensitivities, cycleObject(MulticurveSensitivity.class, sensitivities)); } @Test public void testMultipleCurrencyMulticurveSensitivity() { final String name1 = "YC1"; final String name2 = "YC2"; final Map<String, List<DoublesPair>> yieldCurveSensitivities1 = new HashMap<>(); yieldCurveSensitivities1.put(name1, Arrays.asList(DoublesPair.of(1., 2.), DoublesPair.of(3.5, 6.8))); yieldCurveSensitivities1.put(name2, Arrays.asList(DoublesPair.of(11., 12.), DoublesPair.of(13.5, 16.8), DoublesPair.of(45., 12.))); final Map<String, List<ForwardSensitivity>> forwardCurveSensitivities1 = new HashMap<>(); final ForwardSensitivity sensi1 = new SimplyCompoundedForwardSensitivity(1, 5, 0.25, 10); final ForwardSensitivity sensi2 = new SimplyCompoundedForwardSensitivity(2, 3, 0.215, 20); final ForwardSensitivity sensi3 = new SimplyCompoundedForwardSensitivity(3, 9, 0.225, 30); forwardCurveSensitivities1.put(name1, Arrays.asList(sensi1, sensi2, sensi3)); final ForwardSensitivity sensi4 = new SimplyCompoundedForwardSensitivity(0.1, 4, 0.5, 10); forwardCurveSensitivities1.put(name2, Arrays.asList(sensi4)); final MulticurveSensitivity sensitivities1 = MulticurveSensitivity.of(yieldCurveSensitivities1, forwardCurveSensitivities1); final String name3 = "YC3"; final String name4 = "YC4"; final Map<String, List<DoublesPair>> yieldCurveSensitivities2 = new HashMap<>(); yieldCurveSensitivities2.put(name3, Arrays.asList(DoublesPair.of(10., 20.))); yieldCurveSensitivities2.put(name4, Arrays.asList(DoublesPair.of(110., 120.), DoublesPair.of(13.51, 16.81), DoublesPair.of(45.3, 12.3))); final Map<String, List<ForwardSensitivity>> forwardCurveSensitivities2 = new HashMap<>(); final ForwardSensitivity sensi21 = new SimplyCompoundedForwardSensitivity(18, 58, 0.258, 108); final ForwardSensitivity sensi22 = new SimplyCompoundedForwardSensitivity(32, 92, 0.2252, 302); final ForwardSensitivity sensi23 = new SimplyCompoundedForwardSensitivity(0.18, 48, 0.58, 18); forwardCurveSensitivities2.put(name3, Arrays.asList(sensi21, sensi22)); forwardCurveSensitivities2.put(name4, Arrays.asList(sensi23)); final MulticurveSensitivity sensitivities2 = MulticurveSensitivity.of(yieldCurveSensitivities2, forwardCurveSensitivities2); MultipleCurrencyMulticurveSensitivity sensitivities = new MultipleCurrencyMulticurveSensitivity(); sensitivities = sensitivities.plus(Currency.AUD, sensitivities1); sensitivities = sensitivities.plus(Currency.CAD, sensitivities2); assertEquals(sensitivities, cycleObject(MultipleCurrencyMulticurveSensitivity.class, sensitivities)); } @Test public void testSimpleParameterSensitivity() { final String name1 = "YC1"; final String name2 = "YC2"; final DoubleMatrix1D sensitivities1 = new DoubleMatrix1D(new double[] {1, 2, 4, 6, 7, 9, 12 }); final DoubleMatrix1D sensitivities2 = new DoubleMatrix1D(new double[] {89, 456, 234, 12 }); final LinkedHashMap<String, DoubleMatrix1D> sensitivities = new LinkedHashMap<>(); sensitivities.put(name1, sensitivities1); sensitivities.put(name2, sensitivities2); final SimpleParameterSensitivity sps = new SimpleParameterSensitivity(sensitivities); assertEquals(sps, cycleObject(SimpleParameterSensitivity.class, sps)); } @Test public void testMultipleCurrencyParameterSensitivity() { final String name1 = "YC1"; final String name2 = "YC2"; final DoubleMatrix1D sensitivities1 = new DoubleMatrix1D(new double[] {1, 2, 4, 6, 7, 9, 12 }); final DoubleMatrix1D sensitivities2 = new DoubleMatrix1D(new double[] {89, 456, 234, 12 }); final String name3 = "YC3"; final String name4 = "YC4"; final DoubleMatrix1D sensitivities3 = new DoubleMatrix1D(new double[] {11, 21, 41, 61, 17, 91, 112 }); final DoubleMatrix1D sensitivities4 = new DoubleMatrix1D(new double[] {891, 4561, 1234, 112 }); final LinkedHashMap<Pair<String, Currency>, DoubleMatrix1D> data = new LinkedHashMap<>(); data.put(Pairs.of(name1, Currency.AUD), sensitivities1); data.put(Pairs.of(name2, Currency.EUR), sensitivities2); data.put(Pairs.of(name3, Currency.USD), sensitivities3); data.put(Pairs.of(name4, Currency.CAD), sensitivities4); final MultipleCurrencyParameterSensitivity sensitivities = new MultipleCurrencyParameterSensitivity(data); assertEquals(sensitivities, cycleObject(MultipleCurrencyParameterSensitivity.class, sensitivities)); } @Test public void testCurveBuildingBlock() { final LinkedHashMap<String, Pair<Integer, Integer>> data = new LinkedHashMap<>(); data.put("YC1", Pairs.of(Integer.valueOf(0), Integer.valueOf(20))); data.put("YC2", Pairs.of(Integer.valueOf(20), Integer.valueOf(30))); final CurveBuildingBlock curveBuildingBlock = new CurveBuildingBlock(data); assertEquals(curveBuildingBlock, cycleObject(CurveBuildingBlock.class, curveBuildingBlock)); } @Test public void testCurveBuildingBlockBundle() { final LinkedHashMap<String, Pair<Integer, Integer>> data1 = new LinkedHashMap<>(); data1.put("YC1", Pairs.of(Integer.valueOf(0), Integer.valueOf(2))); data1.put("YC2", Pairs.of(Integer.valueOf(2), Integer.valueOf(3))); final CurveBuildingBlock curveBuildingBlock1 = new CurveBuildingBlock(data1); final DoubleMatrix2D matrix1 = new DoubleMatrix2D(new double[][] {new double[] {1, 2, 3, 4 }, new double[] {5, 6, 7, 8 } }); final LinkedHashMap<String, Pair<Integer, Integer>> data2 = new LinkedHashMap<>(); data2.put("YC3", Pairs.of(Integer.valueOf(0), Integer.valueOf(1))); data2.put("YC4", Pairs.of(Integer.valueOf(1), Integer.valueOf(2))); final CurveBuildingBlock curveBuildingBlock2 = new CurveBuildingBlock(data2); final DoubleMatrix2D matrix2 = new DoubleMatrix2D(new double[][] {new double[] {9, 8, 7 }, new double[] {6, 5, 4 } }); final LinkedHashMap<String, Pair<CurveBuildingBlock, DoubleMatrix2D>> data = new LinkedHashMap<>(); data.put("B1", Pairs.of(curveBuildingBlock1, matrix1)); data.put("B2", Pairs.of(curveBuildingBlock2, matrix2)); final CurveBuildingBlockBundle cbbb = new CurveBuildingBlockBundle(data); assertEquals(cbbb, cycleObject(CurveBuildingBlockBundle.class, cbbb)); } @Test public void testInflationSensitivity() { final String name1 = "YC1"; final String name2 = "YC2"; final Map<String, List<DoublesPair>> yieldCurveSensitivities = new HashMap<>(); yieldCurveSensitivities.put(name1, Arrays.asList(DoublesPair.of(1., 2.), DoublesPair.of(3.5, 6.8))); yieldCurveSensitivities.put(name2, Arrays.asList(DoublesPair.of(11., 12.), DoublesPair.of(13.5, 16.8), DoublesPair.of(45., 12.))); final Map<String, List<ForwardSensitivity>> forwardCurveSensitivities = new HashMap<>(); final ForwardSensitivity sensi1 = new SimplyCompoundedForwardSensitivity(1, 5, 0.25, 10); final ForwardSensitivity sensi2 = new SimplyCompoundedForwardSensitivity(2, 3, 0.215, 20); final ForwardSensitivity sensi3 = new SimplyCompoundedForwardSensitivity(3, 9, 0.225, 30); forwardCurveSensitivities.put(name1, Arrays.asList(sensi1, sensi2, sensi3)); final ForwardSensitivity sensi4 = new SimplyCompoundedForwardSensitivity(0.1, 4, 0.5, 10); forwardCurveSensitivities.put(name2, Arrays.asList(sensi4)); final MulticurveSensitivity sensitivities = MulticurveSensitivity.of(yieldCurveSensitivities, forwardCurveSensitivities); final String name3 = "PC1"; final String name4 = "PC2"; final Map<String, List<DoublesPair>> priceCurveSensitivities = new HashMap<>(); priceCurveSensitivities.put(name3, Arrays.asList(DoublesPair.of(1.2, 2.3), DoublesPair.of(3.4, 4.5))); priceCurveSensitivities.put(name4, Arrays.asList(DoublesPair.of(9.8, 8.7), DoublesPair.of(5.4, 3.2), DoublesPair.of(2.33, 3.44))); final InflationSensitivity is = InflationSensitivity.of(sensitivities, priceCurveSensitivities); assertEquals(is, cycleObject(InflationSensitivity.class, is)); } @Test public void testMultipleCurrencyInflationSensitivity() { final String name1 = "YC1"; final String name2 = "YC2"; final Map<String, List<DoublesPair>> yieldCurveSensitivities1 = new HashMap<>(); yieldCurveSensitivities1.put(name1, Arrays.asList(DoublesPair.of(1., 2.), DoublesPair.of(3.5, 6.8))); yieldCurveSensitivities1.put(name2, Arrays.asList(DoublesPair.of(11., 12.), DoublesPair.of(13.5, 16.8), DoublesPair.of(45., 12.))); final Map<String, List<ForwardSensitivity>> forwardCurveSensitivities1 = new HashMap<>(); final ForwardSensitivity sensi1 = new SimplyCompoundedForwardSensitivity(1, 5, 0.25, 10); final ForwardSensitivity sensi2 = new SimplyCompoundedForwardSensitivity(2, 3, 0.215, 20); final ForwardSensitivity sensi3 = new SimplyCompoundedForwardSensitivity(3, 9, 0.225, 30); forwardCurveSensitivities1.put(name1, Arrays.asList(sensi1, sensi2, sensi3)); final ForwardSensitivity sensi4 = new SimplyCompoundedForwardSensitivity(0.1, 4, 0.5, 10); forwardCurveSensitivities1.put(name2, Arrays.asList(sensi4)); final MulticurveSensitivity sensitivities1 = MulticurveSensitivity.of(yieldCurveSensitivities1, forwardCurveSensitivities1); final Map<String, List<DoublesPair>> priceCurveSensitivities1 = new HashMap<>(); priceCurveSensitivities1.put("PC1", Arrays.asList(DoublesPair.of(1.2, 2.3), DoublesPair.of(3.4, 4.5))); priceCurveSensitivities1.put("PC2", Arrays.asList(DoublesPair.of(9.8, 8.7), DoublesPair.of(5.4, 3.2), DoublesPair.of(2.33, 3.44))); final InflationSensitivity is1 = InflationSensitivity.of(sensitivities1, priceCurveSensitivities1); final String name3 = "YC3"; final String name4 = "YC4"; final Map<String, List<DoublesPair>> yieldCurveSensitivities2 = new HashMap<>(); yieldCurveSensitivities2.put(name3, Arrays.asList(DoublesPair.of(10., 20.))); yieldCurveSensitivities2.put(name4, Arrays.asList(DoublesPair.of(110., 120.), DoublesPair.of(13.51, 16.81), DoublesPair.of(45.3, 12.3))); final Map<String, List<ForwardSensitivity>> forwardCurveSensitivities2 = new HashMap<>(); final ForwardSensitivity sensi21 = new SimplyCompoundedForwardSensitivity(18, 58, 0.258, 108); final ForwardSensitivity sensi22 = new SimplyCompoundedForwardSensitivity(32, 92, 0.2252, 302); final ForwardSensitivity sensi23 = new SimplyCompoundedForwardSensitivity(0.18, 48, 0.58, 18); forwardCurveSensitivities2.put(name3, Arrays.asList(sensi21, sensi22)); forwardCurveSensitivities2.put(name4, Arrays.asList(sensi23)); final MulticurveSensitivity sensitivities2 = MulticurveSensitivity.of(yieldCurveSensitivities2, forwardCurveSensitivities2); final Map<String, List<DoublesPair>> priceCurveSensitivities2 = new HashMap<>(); priceCurveSensitivities1.put("PC3", Arrays.asList(DoublesPair.of(1.21, 2.31), DoublesPair.of(3.41, 4.51))); priceCurveSensitivities1.put("PC4", Arrays.asList(DoublesPair.of(9.81, 8.71), DoublesPair.of(5.41, 3.21), DoublesPair.of(2.331, 3.441))); final InflationSensitivity is2 = InflationSensitivity.of(sensitivities2, priceCurveSensitivities2); MultipleCurrencyInflationSensitivity sensitivities = new MultipleCurrencyInflationSensitivity(); sensitivities = sensitivities.plus(Currency.AUD, is1); sensitivities = sensitivities.plus(Currency.CAD, is2); assertEquals(sensitivities, cycleObject(MultipleCurrencyInflationSensitivity.class, sensitivities)); } }