/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.curve.generator; import static org.testng.AssertJUnit.assertEquals; import org.apache.commons.lang.ArrayUtils; import org.testng.annotations.Test; import com.opengamma.analytics.financial.curve.interestrate.generator.GeneratorCurveAddYield; import com.opengamma.analytics.financial.curve.interestrate.generator.GeneratorCurveYieldInterpolatedNode; import com.opengamma.analytics.financial.curve.interestrate.generator.GeneratorYDCurve; import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountAddZeroSpreadCurve; import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve; import com.opengamma.analytics.math.interpolation.CombinedInterpolatorExtrapolatorFactory; import com.opengamma.analytics.math.interpolation.Interpolator1D; import com.opengamma.analytics.math.interpolation.Interpolator1DFactory; import com.opengamma.util.test.TestGroup; /** * Tests the curve generator related to curves based on several underlying curve for which the rates (continously compounded) are added. */ @Test(groups = TestGroup.UNIT) public class GeneratorCurveAddYieldTest { private static final String CURVE_NAME = "EUR Curve"; private static final String CURVE_NAME_0 = CURVE_NAME + "-0"; private static final String CURVE_NAME_1 = CURVE_NAME + "-1"; private static final Interpolator1D INTERPOLATOR_LINEAR = CombinedInterpolatorExtrapolatorFactory.getInterpolator(Interpolator1DFactory.LINEAR, Interpolator1DFactory.FLAT_EXTRAPOLATOR, Interpolator1DFactory.FLAT_EXTRAPOLATOR); private static final Interpolator1D INTERPOLATOR_DQ = CombinedInterpolatorExtrapolatorFactory.getInterpolator(Interpolator1DFactory.DOUBLE_QUADRATIC, Interpolator1DFactory.FLAT_EXTRAPOLATOR, Interpolator1DFactory.FLAT_EXTRAPOLATOR); private static final double[] NODES_0 = new double[] {0.01, 0.50, 1.00, 2.00, 5.05, 10.0}; private static final double[] RATE_0 = new double[] {0.02, 0.02, 0.03, 0.01, 0.02, 0.01}; private static final double[] NODES_1 = new double[] {5.05, 10.0, 20.0, 30.0}; private static final double[] RATE_1 = new double[] {0.0010, 0.0020, 0.0050, 0.0000}; private static final double[] RATE = ArrayUtils.addAll(RATE_0, RATE_1); private static final GeneratorCurveYieldInterpolatedNode GENERATOR_YIELD_INTERPOLATED_NODE_1 = new GeneratorCurveYieldInterpolatedNode(NODES_0, INTERPOLATOR_LINEAR); private static final GeneratorCurveYieldInterpolatedNode GENERATOR_YIELD_INTERPOLATED_NODE_2 = new GeneratorCurveYieldInterpolatedNode(NODES_1, INTERPOLATOR_DQ); private static final GeneratorCurveAddYield GENERATOR_ADD = new GeneratorCurveAddYield(new GeneratorYDCurve[] {GENERATOR_YIELD_INTERPOLATED_NODE_1, GENERATOR_YIELD_INTERPOLATED_NODE_2}, false); @Test(expectedExceptions = IllegalArgumentException.class) public void constructorNullGenerators() { new GeneratorCurveAddYield(null, false); } @Test(expectedExceptions = IllegalArgumentException.class) public void generateCurveNullName() { GENERATOR_ADD.generateCurve(null, new double[2]); } @Test public void getNumberOfParameter() { final int nbParamAdd = GENERATOR_ADD.getNumberOfParameter(); assertEquals("GeneratorCurveAddYield: getNumberOfParameter()", GENERATOR_YIELD_INTERPOLATED_NODE_1.getNumberOfParameter() + GENERATOR_YIELD_INTERPOLATED_NODE_2.getNumberOfParameter(), nbParamAdd); } @Test public void generateCurve() { final YieldAndDiscountCurve curveAdd = GENERATOR_ADD.generateCurve(CURVE_NAME, RATE); final YieldAndDiscountCurve curve1 = GENERATOR_YIELD_INTERPOLATED_NODE_1.generateCurve(CURVE_NAME_0, RATE_0); final YieldAndDiscountCurve curve2 = GENERATOR_YIELD_INTERPOLATED_NODE_2.generateCurve(CURVE_NAME_1, RATE_1); final YieldAndDiscountCurve curveExpected = new YieldAndDiscountAddZeroSpreadCurve(CURVE_NAME, false, new YieldAndDiscountCurve[] {curve1, curve2}); assertEquals("GeneratorCurveAddYield: generateCurve()", curveExpected, curveAdd); } }