/** * Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.market.curve; import static com.opengamma.strata.basics.currency.Currency.USD; import static org.testng.Assert.assertEquals; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; import com.opengamma.strata.collect.array.DoubleArray; import com.opengamma.strata.market.param.LabelParameterMetadata; import com.opengamma.strata.market.param.ParameterMetadata; import com.opengamma.strata.market.param.UnitParameterSensitivity; /** * Test {@link Curve}. */ @Test public class CurveTest { private static final CurveName CURVE_NAME = CurveName.of("Curve"); private static final LabelParameterMetadata PARAM_META = LabelParameterMetadata.of("TestParam"); public void test_withPerturbation() { Curve test = new TestingCurve(2d); assertEquals(test.withPerturbation((i, v, m) -> v + 1).getParameter(0), 3d); } public void test_createParameterSensitivity_unit() { Curve test = new TestingCurve(2d); assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getMarketDataName(), CURVE_NAME); assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getParameterCount(), 1); assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getParameterMetadata(), ImmutableList.of(PARAM_META)); assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getSensitivity(), DoubleArray.of(2d)); } public void test_createParameterSensitivity_currency() { Curve test = new TestingCurve(2d); assertEquals(test.createParameterSensitivity(USD, DoubleArray.of(2d)).getMarketDataName(), CURVE_NAME); assertEquals(test.createParameterSensitivity(USD, DoubleArray.of(2d)).getParameterCount(), 1); assertEquals(test.createParameterSensitivity(USD, DoubleArray.of(2d)).getParameterMetadata(), ImmutableList.of(PARAM_META)); assertEquals(test.createParameterSensitivity(USD, DoubleArray.of(2d)).getCurrency(), USD); assertEquals(test.createParameterSensitivity(USD, DoubleArray.of(2d)).getSensitivity(), DoubleArray.of(2d)); } //------------------------------------------------------------------------- static class TestingCurve implements Curve { final double value; TestingCurve(double value) { this.value = value; } @Override public int getParameterCount() { return 1; } @Override public double getParameter(int parameterIndex) { return value; } @Override public ParameterMetadata getParameterMetadata(int parameterIndex) { return PARAM_META; } @Override public CurveMetadata getMetadata() { return DefaultCurveMetadata.of(CURVE_NAME); } @Override public Curve withMetadata(CurveMetadata metadata) { return this; } @Override public Curve withParameter(int parameterIndex, double newValue) { return new TestingCurve(newValue); } @Override public double yValue(double x) { return value; } @Override public UnitParameterSensitivity yValueParameterSensitivity(double x) { return UnitParameterSensitivity.of(CURVE_NAME, DoubleArray.filled(1)); } @Override public double firstDerivative(double x) { return 0; } } }