/** * Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.measure.curve; import static com.opengamma.strata.collect.TestHelper.assertThrowsIllegalArg; import static com.opengamma.strata.collect.TestHelper.date; import static org.testng.Assert.assertEquals; import java.time.LocalDate; import org.testng.annotations.Test; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.opengamma.strata.basics.ReferenceData; import com.opengamma.strata.basics.currency.Currency; import com.opengamma.strata.calc.marketdata.MarketDataConfig; import com.opengamma.strata.calc.marketdata.MarketDataRequirements; import com.opengamma.strata.data.ObservableSource; 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.CurveGroup; import com.opengamma.strata.market.curve.CurveGroupId; import com.opengamma.strata.market.curve.CurveGroupName; import com.opengamma.strata.market.curve.CurveId; import com.opengamma.strata.market.curve.CurveName; /** * Test {@link CurveMarketDataFunction}. */ @Test public class CurveMarketDataFunctionTest { private static final ReferenceData REF_DATA = ReferenceData.standard(); private static final LocalDate VAL_DATE = date(2011, 3, 8); private static final CurveGroupName GROUP_NAME = CurveGroupName.of("Group"); private static final CurveName CURVE_NAME1 = CurveName.of("Name1"); private static final CurveName CURVE_NAME2 = CurveName.of("Name2"); private static final ObservableSource OBS_SOURCE = ObservableSource.of("Vendor"); //------------------------------------------------------------------------- public void test_singleCurve() { Curve curve = ConstantCurve.of(CURVE_NAME1, (double) 1); CurveId curveId1 = CurveId.of(GROUP_NAME, CURVE_NAME1, OBS_SOURCE); CurveId curveId2 = CurveId.of(GROUP_NAME, CURVE_NAME2, OBS_SOURCE); CurveGroupId groupId = CurveGroupId.of(GROUP_NAME, OBS_SOURCE); CurveGroup curveGroup = CurveGroup.of( GROUP_NAME, ImmutableMap.of(Currency.AUD, curve), ImmutableMap.of()); ScenarioMarketData marketData = ImmutableScenarioMarketData.builder(VAL_DATE).addValue(groupId, curveGroup).build(); CurveMarketDataFunction test = new CurveMarketDataFunction(); MarketDataRequirements reqs = test.requirements(curveId1, MarketDataConfig.empty()); assertEquals(reqs.getNonObservables(), ImmutableSet.of(groupId)); MarketDataBox<Curve> result = test.build(curveId1, MarketDataConfig.empty(), marketData, REF_DATA); assertEquals(result, MarketDataBox.ofSingleValue(curve)); assertThrowsIllegalArg(() -> test.build(curveId2, MarketDataConfig.empty(), marketData, REF_DATA)); } public void test_multipleCurves() { Curve curve1 = ConstantCurve.of(CURVE_NAME1, (double) 1); Curve curve2 = ConstantCurve.of(CURVE_NAME2, (double) 2); CurveId curveId1 = CurveId.of(GROUP_NAME, CURVE_NAME1); CurveId curveId2 = CurveId.of(GROUP_NAME, CURVE_NAME2); CurveGroupId groupId = CurveGroupId.of(GROUP_NAME); CurveGroup curveGroup = CurveGroup.of( GROUP_NAME, ImmutableMap.of(Currency.AUD, curve1, Currency.GBP, curve2), ImmutableMap.of()); ScenarioMarketData marketData = ImmutableScenarioMarketData.builder(VAL_DATE).addValue(groupId, curveGroup).build(); CurveMarketDataFunction test = new CurveMarketDataFunction(); MarketDataBox<Curve> result1 = test.build(curveId1, MarketDataConfig.empty(), marketData, REF_DATA); assertEquals(result1, MarketDataBox.ofSingleValue(curve1)); MarketDataBox<Curve> result2 = test.build(curveId2, MarketDataConfig.empty(), marketData, REF_DATA); assertEquals(result2, MarketDataBox.ofSingleValue(curve2)); } }