/** * Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.basics; 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.coverPrivateConstructor; import static org.testng.Assert.assertEquals; import java.util.HashMap; import java.util.Map; import java.util.Optional; import org.testng.annotations.Test; import com.google.common.collect.ImmutableMap; import com.opengamma.strata.basics.date.HolidayCalendarIds; /** * Test {@link ReferenceData} and {@link ImmutableReferenceData}. */ @Test public class ReferenceDataTest { private static final TestingReferenceDataId ID1 = new TestingReferenceDataId("1"); private static final TestingReferenceDataId ID2 = new TestingReferenceDataId("2"); private static final TestingReferenceDataId ID3 = new TestingReferenceDataId("3"); private static final Number VAL1 = 1; private static final Number VAL2 = 2; private static final Number VAL3 = 3; private static final ReferenceData REF_DATA1 = new ReferenceData() { @Override @SuppressWarnings("unchecked") public <T> Optional<T> findValue(ReferenceDataId<T> id) { return id.equals(ID1) ? Optional.of((T) VAL1) : Optional.empty(); } }; private static final ReferenceData REF_DATA2 = new ReferenceData() { @Override @SuppressWarnings("unchecked") public <T> Optional<T> findValue(ReferenceDataId<T> id) { return id.equals(ID2) ? Optional.of((T) VAL2) : Optional.empty(); } }; private static final ReferenceData REF_DATA3 = new ReferenceData() { @Override @SuppressWarnings("unchecked") public <T> Optional<T> findValue(ReferenceDataId<T> id) { return id.equals(ID1) ? Optional.of((T) VAL3) : Optional.empty(); } }; private static final ReferenceData REF_DATA12 = new ReferenceData() { @Override @SuppressWarnings("unchecked") public <T> Optional<T> findValue(ReferenceDataId<T> id) { return id.equals(ID2) ? Optional.of((T) VAL2) : (id.equals(ID1) ? Optional.of((T) VAL1) : Optional.empty()); } }; //------------------------------------------------------------------------- public void test_standard() { ReferenceData test = ReferenceData.standard(); assertEquals(test.containsValue(HolidayCalendarIds.NO_HOLIDAYS), true); assertEquals(test.containsValue(HolidayCalendarIds.SAT_SUN), true); assertEquals(test.containsValue(HolidayCalendarIds.FRI_SAT), true); assertEquals(test.containsValue(HolidayCalendarIds.THU_FRI), true); assertEquals(test.containsValue(HolidayCalendarIds.GBLO), true); } public void test_minimal() { ReferenceData test = ReferenceData.minimal(); assertEquals(test.containsValue(HolidayCalendarIds.NO_HOLIDAYS), true); assertEquals(test.containsValue(HolidayCalendarIds.SAT_SUN), true); assertEquals(test.containsValue(HolidayCalendarIds.FRI_SAT), true); assertEquals(test.containsValue(HolidayCalendarIds.THU_FRI), true); assertEquals(test.containsValue(HolidayCalendarIds.GBLO), false); } //------------------------------------------------------------------------- public void test_of_RD() { Map<ReferenceDataId<?>, Object> dataMap = ImmutableMap.of(ID1, VAL1, ID2, VAL2); ReferenceData test = ReferenceData.of(dataMap); assertEquals(test.containsValue(HolidayCalendarIds.NO_HOLIDAYS), true); assertEquals(test.containsValue(HolidayCalendarIds.SAT_SUN), true); assertEquals(test.containsValue(HolidayCalendarIds.FRI_SAT), true); assertEquals(test.containsValue(HolidayCalendarIds.THU_FRI), true); assertEquals(test.containsValue(ID1), true); assertEquals(test.getValue(ID1), VAL1); assertEquals(test.findValue(ID1), Optional.of(VAL1)); assertEquals(test.containsValue(ID2), true); assertEquals(test.getValue(ID2), VAL2); assertEquals(test.findValue(ID2), Optional.of(VAL2)); assertEquals(test.containsValue(ID3), false); assertThrows(() -> test.getValue(ID3), ReferenceDataNotFoundException.class); assertEquals(test.findValue(ID3), Optional.empty()); } public void test_of_IRD() { Map<ReferenceDataId<?>, Object> dataMap = ImmutableMap.of(ID1, VAL1, ID2, VAL2); ImmutableReferenceData test = ImmutableReferenceData.of(dataMap); assertEquals(test.containsValue(HolidayCalendarIds.NO_HOLIDAYS), false); assertEquals(test.containsValue(HolidayCalendarIds.SAT_SUN), false); assertEquals(test.containsValue(HolidayCalendarIds.FRI_SAT), false); assertEquals(test.containsValue(HolidayCalendarIds.THU_FRI), false); assertEquals(test.containsValue(ID1), true); assertEquals(test.getValue(ID1), VAL1); assertEquals(test.findValue(ID1), Optional.of(VAL1)); assertEquals(test.containsValue(ID2), true); assertEquals(test.getValue(ID2), VAL2); assertEquals(test.findValue(ID2), Optional.of(VAL2)); assertEquals(test.containsValue(ID3), false); assertThrows(() -> test.getValue(ID3), ReferenceDataNotFoundException.class); assertEquals(test.findValue(ID3), Optional.empty()); } public void test_of_single() { ReferenceData test = ImmutableReferenceData.of(ID1, VAL1); assertEquals(test.containsValue(HolidayCalendarIds.NO_HOLIDAYS), false); assertEquals(test.containsValue(HolidayCalendarIds.SAT_SUN), false); assertEquals(test.containsValue(HolidayCalendarIds.FRI_SAT), false); assertEquals(test.containsValue(HolidayCalendarIds.THU_FRI), false); assertEquals(test.containsValue(ID1), true); assertEquals(test.getValue(ID1), VAL1); assertEquals(test.findValue(ID1), Optional.of(VAL1)); assertEquals(test.containsValue(ID2), false); assertThrows(() -> test.getValue(ID2), ReferenceDataNotFoundException.class); assertEquals(test.findValue(ID2), Optional.empty()); } public void test_empty() { ReferenceData test = ReferenceData.empty(); assertEquals(test.containsValue(ID1), false); assertThrows(() -> test.getValue(ID1), ReferenceDataNotFoundException.class); assertEquals(test.findValue(ID1), Optional.empty()); } public void test_of_badType() { Map<ReferenceDataId<?>, Object> dataMap = ImmutableMap.of(ID1, "67"); // not a Number assertThrows(() -> ReferenceData.of(dataMap), ClassCastException.class); } public void test_of_null() { Map<ReferenceDataId<?>, Object> dataMap = new HashMap<>(); dataMap.put(ID1, null); assertThrows(() -> ReferenceData.of(dataMap), IllegalArgumentException.class); } //------------------------------------------------------------------------- public void test_defaultMethods() { assertEquals(REF_DATA1.containsValue(ID1), true); assertEquals(REF_DATA1.containsValue(ID2), false); assertEquals(REF_DATA1.getValue(ID1), VAL1); assertThrows(() -> REF_DATA1.getValue(ID2), ReferenceDataNotFoundException.class); assertEquals(REF_DATA1.findValue(ID1), Optional.of(VAL1)); assertEquals(REF_DATA1.findValue(ID2), Optional.empty()); assertEquals(REF_DATA1.queryValueOrNull(ID1), VAL1); assertEquals(REF_DATA1.queryValueOrNull(ID2), null); assertEquals(ID1.queryValueOrNull(REF_DATA1), VAL1); assertEquals(ID2.queryValueOrNull(REF_DATA1), null); } //------------------------------------------------------------------------- public void test_combinedWith_other_other_noClash() { ReferenceData test = REF_DATA1.combinedWith(REF_DATA2); assertEquals(test.getValue(ID1), VAL1); assertEquals(test.getValue(ID2), VAL2); } public void test_combinedWith_other_other_noClashSame() { ReferenceData test = REF_DATA1.combinedWith(REF_DATA12); assertEquals(test.getValue(ID1), VAL1); assertEquals(test.getValue(ID2), VAL2); } public void test_combinedWith_other_other_clash() { ReferenceData combined = REF_DATA1.combinedWith(REF_DATA3); assertEquals(combined.getValue(ID1), VAL1); } //------------------------------------------------------------------------- public void test_combinedWith_IRD_IRD_noClash() { Map<ReferenceDataId<?>, Object> dataMap1 = ImmutableMap.of(ID1, VAL1); ImmutableReferenceData test1 = ImmutableReferenceData.of(dataMap1); Map<ReferenceDataId<?>, Object> dataMap2 = ImmutableMap.of(ID2, VAL2); ImmutableReferenceData test2 = ImmutableReferenceData.of(dataMap2); ReferenceData test = test1.combinedWith(test2); assertEquals(test.getValue(ID1), VAL1); assertEquals(test.getValue(ID2), VAL2); } public void test_combinedWith_IRD_IRD_noClashSame() { Map<ReferenceDataId<?>, Object> dataMap1 = ImmutableMap.of(ID1, VAL1); ImmutableReferenceData test1 = ImmutableReferenceData.of(dataMap1); Map<ReferenceDataId<?>, Object> dataMap2 = ImmutableMap.of(ID1, VAL1, ID2, VAL2); ImmutableReferenceData test2 = ImmutableReferenceData.of(dataMap2); ReferenceData test = test1.combinedWith(test2); assertEquals(test.getValue(ID1), VAL1); assertEquals(test.getValue(ID2), VAL2); } public void test_combinedWith_IRD_IRD_clash() { Map<ReferenceDataId<?>, Object> dataMap1 = ImmutableMap.of(ID1, VAL1); ImmutableReferenceData test1 = ImmutableReferenceData.of(dataMap1); Map<ReferenceDataId<?>, Object> dataMap2 = ImmutableMap.of(ID1, VAL3); ImmutableReferenceData test2 = ImmutableReferenceData.of(dataMap2); ReferenceData combined = test1.combinedWith(test2); assertEquals(combined.getValue(ID1), VAL1); } //------------------------------------------------------------------------- public void test_combinedWith_IRD_other_noClash() { Map<ReferenceDataId<?>, Object> dataMap1 = ImmutableMap.of(ID1, VAL1); ImmutableReferenceData test1 = ImmutableReferenceData.of(dataMap1); ReferenceData test = test1.combinedWith(REF_DATA2); assertEquals(test.getValue(ID1), VAL1); assertEquals(test.getValue(ID2), VAL2); } //------------------------------------------------------------------------- public void coverage() { Map<ReferenceDataId<?>, Object> dataMap = ImmutableMap.of(ID1, VAL1); ImmutableReferenceData test = ImmutableReferenceData.of(dataMap); coverImmutableBean(test); Map<ReferenceDataId<?>, Object> dataMap2 = ImmutableMap.of(ID2, VAL2); ImmutableReferenceData test2 = ImmutableReferenceData.of(dataMap2); coverBeanEquals(test, test2); coverPrivateConstructor(StandardReferenceData.class); } public void test_serialization() { Map<ReferenceDataId<?>, Object> dataMap = ImmutableMap.of(ID1, VAL1); ReferenceData test = ImmutableReferenceData.of(dataMap); assertSerialization(test); } }