/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.data.scenario;
import static com.opengamma.strata.collect.TestHelper.assertSerialization;
import static com.opengamma.strata.collect.TestHelper.assertThrows;
import static com.opengamma.strata.collect.TestHelper.coverBeanEquals;
import static com.opengamma.strata.collect.TestHelper.coverImmutableBean;
import static com.opengamma.strata.collect.TestHelper.date;
import static org.testng.Assert.assertEquals;
import java.time.LocalDate;
import java.util.Map;
import java.util.Optional;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.opengamma.strata.collect.timeseries.LocalDateDoubleTimeSeries;
import com.opengamma.strata.data.MarketDataNotFoundException;
import com.opengamma.strata.data.ObservableId;
import com.opengamma.strata.data.TestingNamedId;
import com.opengamma.strata.data.TestingObservableId;
/**
* Test {@link ExtendedScenarioMarketData}.
*/
@Test
public class ExtendedScenarioMarketDataTest {
private static final LocalDate VAL_DATE = date(2015, 6, 30);
private static final TestingNamedId ID1 = new TestingNamedId("1");
private static final TestingNamedId ID2 = new TestingNamedId("2");
private static final TestingNamedId ID3 = new TestingNamedId("3");
private static final TestingObservableId ID4 = new TestingObservableId("4");
private static final MarketDataBox<String> VAL1 = MarketDataBox.ofSingleValue("1");
private static final MarketDataBox<String> VAL2 = MarketDataBox.ofSingleValue("2");
private static final MarketDataBox<String> VAL3 = MarketDataBox.ofSingleValue("3");
private static final LocalDateDoubleTimeSeries TIME_SERIES = LocalDateDoubleTimeSeries.builder()
.put(date(2011, 3, 8), 1.1)
.put(date(2011, 3, 10), 1.2)
.build();
private static final ImmutableScenarioMarketData BASE_DATA = baseData();
//-------------------------------------------------------------------------
public void of_addition() {
ExtendedScenarioMarketData<String> test = ExtendedScenarioMarketData.of(ID3, VAL3, BASE_DATA);
assertEquals(test.getId(), ID3);
assertEquals(test.getValue(), VAL3);
assertEquals(test.getValuationDate(), MarketDataBox.ofSingleValue(VAL_DATE));
assertEquals(test.containsValue(ID1), true);
assertEquals(test.containsValue(ID2), true);
assertEquals(test.containsValue(ID3), true);
assertEquals(test.containsValue(ID4), false);
assertEquals(test.getValue(ID1), VAL1);
assertEquals(test.getValue(ID2), VAL2);
assertEquals(test.getValue(ID3), VAL3);
assertThrows(() -> test.getValue(ID4), MarketDataNotFoundException.class);
assertEquals(test.findValue(ID1), Optional.of(VAL1));
assertEquals(test.findValue(ID2), Optional.of(VAL2));
assertEquals(test.findValue(ID3), Optional.of(VAL3));
assertEquals(test.findValue(ID4), Optional.empty());
assertEquals(test.getIds(), ImmutableSet.of(ID1, ID2, ID3));
assertEquals(test.findIds(ID1.getMarketDataName()), ImmutableSet.of(ID1));
assertEquals(test.findIds(ID3.getMarketDataName()), ImmutableSet.of(ID3));
assertEquals(test.getTimeSeries(ID4), TIME_SERIES);
}
public void of_override() {
ExtendedScenarioMarketData<String> test = ExtendedScenarioMarketData.of(ID1, VAL3, BASE_DATA);
assertEquals(test.getId(), ID1);
assertEquals(test.getValue(), VAL3);
assertEquals(test.getValuationDate(), MarketDataBox.ofSingleValue(VAL_DATE));
assertEquals(test.containsValue(ID1), true);
assertEquals(test.containsValue(ID2), true);
assertEquals(test.containsValue(ID3), false);
assertEquals(test.getValue(ID1), VAL3);
assertEquals(test.getValue(ID2), VAL2);
assertThrows(() -> test.getValue(ID3), MarketDataNotFoundException.class);
assertEquals(test.getIds(), ImmutableSet.of(ID1, ID2));
assertEquals(test.findValue(ID1), Optional.of(VAL3));
assertEquals(test.findValue(ID2), Optional.of(VAL2));
assertEquals(test.findValue(ID3), Optional.empty());
assertEquals(test.getTimeSeries(ID4), TIME_SERIES);
}
//-------------------------------------------------------------------------
public void coverage() {
ExtendedScenarioMarketData<String> test = ExtendedScenarioMarketData.of(ID1, VAL1, BASE_DATA);
coverImmutableBean(test);
ExtendedScenarioMarketData<String> test2 = ExtendedScenarioMarketData.of(
ID2,
VAL2,
ImmutableScenarioMarketData.of(3, VAL_DATE, ImmutableMap.of(), ImmutableMap.of()));
coverBeanEquals(test, test2);
}
public void serialization() {
ExtendedScenarioMarketData<String> test = ExtendedScenarioMarketData.of(ID1, VAL3, BASE_DATA);
assertSerialization(test);
}
private static ImmutableScenarioMarketData baseData() {
Map<ObservableId, LocalDateDoubleTimeSeries> timeSeriesMap = ImmutableMap.of(ID4, TIME_SERIES);
return ImmutableScenarioMarketData.builder(VAL_DATE)
.addBox(ID1, VAL1)
.addBox(ID2, VAL2)
.addTimeSeriesMap(timeSeriesMap)
.build();
}
}