/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.basics.index; import static com.opengamma.strata.basics.currency.Currency.AUD; import static com.opengamma.strata.basics.currency.Currency.BRL; import static com.opengamma.strata.basics.currency.Currency.DKK; import static com.opengamma.strata.basics.currency.Currency.GBP; import static com.opengamma.strata.basics.currency.Currency.PLN; import static com.opengamma.strata.basics.currency.Currency.SEK; import static com.opengamma.strata.basics.currency.Currency.USD; import static com.opengamma.strata.basics.date.DayCounts.ACT_360; import static com.opengamma.strata.basics.date.DayCounts.ACT_365F; import static com.opengamma.strata.basics.date.HolidayCalendarIds.AUSY; import static com.opengamma.strata.basics.date.HolidayCalendarIds.BRBD; import static com.opengamma.strata.basics.date.HolidayCalendarIds.DKCO; import static com.opengamma.strata.basics.date.HolidayCalendarIds.GBLO; import static com.opengamma.strata.basics.date.HolidayCalendarIds.PLWA; import static com.opengamma.strata.basics.date.HolidayCalendarIds.SEST; import static com.opengamma.strata.basics.date.HolidayCalendarIds.USNY; import static com.opengamma.strata.collect.TestHelper.assertJodaConvert; import static com.opengamma.strata.collect.TestHelper.assertSerialization; import static com.opengamma.strata.collect.TestHelper.assertThrowsIllegalArg; import static com.opengamma.strata.collect.TestHelper.coverImmutableBean; import static com.opengamma.strata.collect.TestHelper.coverPrivateConstructor; import static com.opengamma.strata.collect.TestHelper.date; import static org.testng.Assert.assertEquals; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.google.common.collect.ImmutableMap; import com.opengamma.strata.basics.ReferenceData; import com.opengamma.strata.basics.currency.Currency; import com.opengamma.strata.basics.date.DayCount; /** * Test Overnight Index. */ @Test public class OvernightIndexTest { private static final ReferenceData REF_DATA = ReferenceData.standard(); public void test_gbpSonia() { OvernightIndex test = OvernightIndex.of("GBP-SONIA"); assertEquals(test.getName(), "GBP-SONIA"); assertEquals(test.getCurrency(), GBP); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), GBLO); assertEquals(test.getPublicationDateOffset(), 0); assertEquals(test.getEffectiveDateOffset(), 0); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getFloatingRateName(), FloatingRateName.of("GBP-SONIA")); assertEquals(test.toString(), "GBP-SONIA"); } public void test_gbpSonia_dates() { OvernightIndex test = OvernightIndex.of("GBP-SONIA"); assertEquals(test.calculatePublicationFromFixing(date(2014, 10, 13), REF_DATA), date(2014, 10, 13)); assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 13), REF_DATA), date(2014, 10, 13)); assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 13), REF_DATA), date(2014, 10, 14)); assertEquals(test.calculateFixingFromEffective(date(2014, 10, 13), REF_DATA), date(2014, 10, 13)); assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 13), REF_DATA), date(2014, 10, 14)); // weekend assertEquals(test.calculatePublicationFromFixing(date(2014, 10, 10), REF_DATA), date(2014, 10, 10)); assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 10), REF_DATA), date(2014, 10, 10)); assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 10), REF_DATA), date(2014, 10, 13)); assertEquals(test.calculateFixingFromEffective(date(2014, 10, 10), REF_DATA), date(2014, 10, 10)); assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 10), REF_DATA), date(2014, 10, 13)); // input date is Sunday assertEquals(test.calculatePublicationFromFixing(date(2014, 10, 12), REF_DATA), date(2014, 10, 13)); assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 12), REF_DATA), date(2014, 10, 13)); assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 12), REF_DATA), date(2014, 10, 14)); assertEquals(test.calculateFixingFromEffective(date(2014, 10, 12), REF_DATA), date(2014, 10, 13)); assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 12), REF_DATA), date(2014, 10, 14)); } public void test_getFloatingRateName() { for (OvernightIndex index : OvernightIndex.extendedEnum().lookupAll().values()) { assertEquals(index.getFloatingRateName(), FloatingRateName.of(index.getName())); } } //------------------------------------------------------------------------- public void test_usdFedFund3m() { OvernightIndex test = OvernightIndex.of("USD-FED-FUND"); assertEquals(test.getCurrency(), USD); assertEquals(test.getName(), "USD-FED-FUND"); assertEquals(test.getFixingCalendar(), USNY); assertEquals(test.getPublicationDateOffset(), 1); assertEquals(test.getEffectiveDateOffset(), 0); assertEquals(test.getDayCount(), ACT_360); assertEquals(test.toString(), "USD-FED-FUND"); } public void test_usdFedFund_dates() { OvernightIndex test = OvernightIndex.of("USD-FED-FUND"); assertEquals(test.calculatePublicationFromFixing(date(2014, 10, 27), REF_DATA), date(2014, 10, 28)); assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 27), REF_DATA), date(2014, 10, 27)); assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 27), REF_DATA), date(2014, 10, 28)); assertEquals(test.calculateFixingFromEffective(date(2014, 10, 27), REF_DATA), date(2014, 10, 27)); assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 27), REF_DATA), date(2014, 10, 28)); // weekend and US holiday assertEquals(test.calculatePublicationFromFixing(date(2014, 10, 10), REF_DATA), date(2014, 10, 14)); assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 10), REF_DATA), date(2014, 10, 10)); assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 10), REF_DATA), date(2014, 10, 14)); assertEquals(test.calculateFixingFromEffective(date(2014, 10, 10), REF_DATA), date(2014, 10, 10)); assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 10), REF_DATA), date(2014, 10, 14)); // input date is Sunday, 13th is US holiday assertEquals(test.calculatePublicationFromFixing(date(2014, 10, 12), REF_DATA), date(2014, 10, 15)); assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 12), REF_DATA), date(2014, 10, 14)); assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 12), REF_DATA), date(2014, 10, 15)); assertEquals(test.calculateFixingFromEffective(date(2014, 10, 12), REF_DATA), date(2014, 10, 14)); assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 12), REF_DATA), date(2014, 10, 15)); } public void test_audAonia() { OvernightIndex test = OvernightIndex.of("AUD-AONIA"); assertEquals(test.getName(), "AUD-AONIA"); assertEquals(test.getCurrency(), AUD); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), AUSY); assertEquals(test.getPublicationDateOffset(), 0); assertEquals(test.getEffectiveDateOffset(), 0); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.toString(), "AUD-AONIA"); } public void test_brlCdi() { OvernightIndex test = OvernightIndex.of("BRL-CDI"); assertEquals(test.getName(), "BRL-CDI"); assertEquals(test.getCurrency(), BRL); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), BRBD); assertEquals(test.getPublicationDateOffset(), 1); assertEquals(test.getEffectiveDateOffset(), 0); assertEquals(test.getDayCount(), DayCount.ofBus252(BRBD)); assertEquals(test.toString(), "BRL-CDI"); } public void test_dkkOis() { OvernightIndex test = OvernightIndex.of("DKK-TNR"); assertEquals(test.getName(), "DKK-TNR"); assertEquals(test.getCurrency(), DKK); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), DKCO); assertEquals(test.getPublicationDateOffset(), 1); assertEquals(test.getEffectiveDateOffset(), 1); assertEquals(test.getDayCount(), ACT_360); assertEquals(test.toString(), "DKK-TNR"); } public void test_plnOis() { OvernightIndex test = OvernightIndex.of("PLN-POLONIA"); assertEquals(test.getName(), "PLN-POLONIA"); assertEquals(test.getCurrency(), PLN); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), PLWA); assertEquals(test.getPublicationDateOffset(), 0); assertEquals(test.getEffectiveDateOffset(), 0); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.toString(), "PLN-POLONIA"); } public void test_sekOis() { OvernightIndex test = OvernightIndex.of("SEK-SIOR"); assertEquals(test.getName(), "SEK-SIOR"); assertEquals(test.getCurrency(), SEK); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), SEST); assertEquals(test.getPublicationDateOffset(), 0); assertEquals(test.getEffectiveDateOffset(), 1); assertEquals(test.getDayCount(), ACT_360); assertEquals(test.toString(), "SEK-SIOR"); } //------------------------------------------------------------------------- @DataProvider(name = "name") static Object[][] data_name() { return new Object[][] { {OvernightIndices.GBP_SONIA, "GBP-SONIA"}, {OvernightIndices.CHF_TOIS, "CHF-TOIS"}, {OvernightIndices.EUR_EONIA, "EUR-EONIA"}, {OvernightIndices.JPY_TONAR, "JPY-TONAR"}, {OvernightIndices.USD_FED_FUND, "USD-FED-FUND"}, {OvernightIndices.AUD_AONIA, "AUD-AONIA"}, {OvernightIndices.BRL_CDI, "BRL-CDI"}, {OvernightIndices.DKK_TNR, "DKK-TNR"}, }; } @Test(dataProvider = "name") public void test_name(OvernightIndex convention, String name) { assertEquals(convention.getName(), name); } @Test(dataProvider = "name") public void test_toString(OvernightIndex convention, String name) { assertEquals(convention.toString(), name); } @Test(dataProvider = "name") public void test_of_lookup(OvernightIndex convention, String name) { assertEquals(OvernightIndex.of(name), convention); } @Test(dataProvider = "name") public void test_extendedEnum(OvernightIndex convention, String name) { ImmutableMap<String, OvernightIndex> map = OvernightIndex.extendedEnum().lookupAll(); assertEquals(map.get(name), convention); } public void test_of_lookup_notFound() { assertThrowsIllegalArg(() -> OvernightIndex.of("Rubbish")); } public void test_of_lookup_null() { assertThrowsIllegalArg(() -> OvernightIndex.of(null)); } //------------------------------------------------------------------------- public void test_equals() { ImmutableOvernightIndex a = ImmutableOvernightIndex.builder() .name("Test") .currency(Currency.GBP) .fixingCalendar(GBLO) .publicationDateOffset(0) .effectiveDateOffset(0) .dayCount(ACT_360) .build(); OvernightIndex b = a.toBuilder().name("Rubbish").build(); assertEquals(a.equals(b), false); } //------------------------------------------------------------------------- public void coverage() { ImmutableOvernightIndex index = ImmutableOvernightIndex.builder() .name("Test") .currency(Currency.GBP) .fixingCalendar(GBLO) .publicationDateOffset(0) .effectiveDateOffset(0) .dayCount(ACT_360) .build(); coverImmutableBean(index); coverPrivateConstructor(OvernightIndices.class); } public void test_jodaConvert() { assertJodaConvert(OvernightIndex.class, OvernightIndices.GBP_SONIA); } public void test_serialization() { OvernightIndex index = ImmutableOvernightIndex.builder() .name("Test") .currency(Currency.GBP) .fixingCalendar(GBLO) .publicationDateOffset(0) .effectiveDateOffset(0) .dayCount(ACT_360) .build(); assertSerialization(index); } }