/** * Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.measure.curve; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import org.testng.annotations.Test; import com.opengamma.strata.basics.ReferenceData; import com.opengamma.strata.calc.marketdata.MarketDataConfig; import com.opengamma.strata.calc.marketdata.MarketDataFactory; import com.opengamma.strata.calc.marketdata.MarketDataFilter; import com.opengamma.strata.calc.marketdata.MarketDataRequirements; import com.opengamma.strata.calc.marketdata.ObservableDataProvider; import com.opengamma.strata.calc.marketdata.PerturbationMapping; import com.opengamma.strata.calc.marketdata.ScenarioDefinition; import com.opengamma.strata.calc.marketdata.TimeSeriesProvider; import com.opengamma.strata.collect.TestHelper; import com.opengamma.strata.data.scenario.ImmutableScenarioMarketData; import com.opengamma.strata.data.scenario.MarketDataBox; import com.opengamma.strata.data.scenario.ScenarioMarketData; import com.opengamma.strata.market.curve.ConstantCurve; import com.opengamma.strata.market.curve.Curve; import com.opengamma.strata.market.curve.CurveGroupName; import com.opengamma.strata.market.curve.CurveId; import com.opengamma.strata.market.curve.CurveName; import com.opengamma.strata.market.curve.CurveParallelShifts; /** * Test usage of {@link CurveParallelShifts}. */ @Test public class CurveParallelShiftsUsageTest { private static final ReferenceData REF_DATA = ReferenceData.standard(); public void absoluteScenarios() { CurveName curveName = CurveName.of("curveName"); CurveGroupName curveGroupName = CurveGroupName.of("curveGroupName"); Curve curve = ConstantCurve.of(curveName, 2); PerturbationMapping<Curve> mapping = PerturbationMapping.of( Curve.class, MarketDataFilter.ofName(curveName), CurveParallelShifts.absolute(0.1, 0.2, 0.3)); CurveId curveId = CurveId.of(curveGroupName, curveName); ScenarioMarketData marketData = ImmutableScenarioMarketData.builder(TestHelper.date(2011, 3, 8)) .addValue(curveId, curve) .build(); ScenarioDefinition scenarioDefinition = ScenarioDefinition.ofMappings(mapping); MarketDataFactory marketDataFactory = MarketDataFactory.of(mock(ObservableDataProvider.class), mock(TimeSeriesProvider.class)); MarketDataRequirements requirements = MarketDataRequirements.builder().addValues(curveId).build(); ScenarioMarketData scenarioData = marketDataFactory.createMultiScenario( requirements, MarketDataConfig.empty(), marketData, REF_DATA, scenarioDefinition); MarketDataBox<Curve> curves = scenarioData.getValue(curveId); assertThat(curves.getScenarioCount()).isEqualTo(3); checkCurveValues(curves.getValue(0), 2.1); checkCurveValues(curves.getValue(1), 2.2); checkCurveValues(curves.getValue(2), 2.3); } // It's not possible to do an equality test on the curves because shifting them wraps them in a different type private void checkCurveValues(Curve curve, double expectedValue) { for (int i = 0; i < 10; i++) { assertThat(curve.yValue((double) i)).isEqualTo(expectedValue); } } }