/**
* 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.CZK;
import static com.opengamma.strata.basics.currency.Currency.DKK;
import static com.opengamma.strata.basics.currency.Currency.EUR;
import static com.opengamma.strata.basics.currency.Currency.GBP;
import static com.opengamma.strata.basics.currency.Currency.HUF;
import static com.opengamma.strata.basics.currency.Currency.JPY;
import static com.opengamma.strata.basics.currency.Currency.MXN;
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.currency.Currency.ZAR;
import static com.opengamma.strata.basics.date.BusinessDayConventions.FOLLOWING;
import static com.opengamma.strata.basics.date.BusinessDayConventions.MODIFIED_FOLLOWING;
import static com.opengamma.strata.basics.date.BusinessDayConventions.PRECEDING;
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.CZPR;
import static com.opengamma.strata.basics.date.HolidayCalendarIds.DKCO;
import static com.opengamma.strata.basics.date.HolidayCalendarIds.EUTA;
import static com.opengamma.strata.basics.date.HolidayCalendarIds.GBLO;
import static com.opengamma.strata.basics.date.HolidayCalendarIds.HUBU;
import static com.opengamma.strata.basics.date.HolidayCalendarIds.JPTO;
import static com.opengamma.strata.basics.date.HolidayCalendarIds.MXMC;
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.basics.date.HolidayCalendarIds.ZAJO;
import static com.opengamma.strata.basics.date.Tenor.TENOR_1M;
import static com.opengamma.strata.basics.date.Tenor.TENOR_2M;
import static com.opengamma.strata.basics.date.Tenor.TENOR_3M;
import static com.opengamma.strata.basics.date.Tenor.TENOR_4M;
import static com.opengamma.strata.basics.date.Tenor.TENOR_4W;
import static com.opengamma.strata.basics.date.Tenor.TENOR_5M;
import static com.opengamma.strata.basics.date.Tenor.TENOR_6M;
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 java.time.LocalTime;
import java.time.ZoneId;
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.BusinessDayAdjustment;
import com.opengamma.strata.basics.date.DaysAdjustment;
import com.opengamma.strata.basics.date.PeriodAdditionConventions;
import com.opengamma.strata.basics.date.TenorAdjustment;
/**
* Test Ibor Index.
*/
@Test
public class IborIndexTest {
private static final ReferenceData REF_DATA = ReferenceData.standard();
public void test_gbpLibor3m() {
IborIndex test = IborIndex.of("GBP-LIBOR-3M");
assertEquals(test.getName(), "GBP-LIBOR-3M");
assertEquals(test.getCurrency(), GBP);
assertEquals(test.isActive(), true);
assertEquals(test.getTenor(), TENOR_3M);
assertEquals(test.getFixingCalendar(), GBLO);
assertEquals(test.getFixingDateOffset(),
DaysAdjustment.ofCalendarDays(0, BusinessDayAdjustment.of(PRECEDING, GBLO)));
assertEquals(test.getEffectiveDateOffset(),
DaysAdjustment.ofCalendarDays(0, BusinessDayAdjustment.of(FOLLOWING, GBLO)));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.ofLastBusinessDay(TENOR_3M, BusinessDayAdjustment.of(MODIFIED_FOLLOWING, GBLO)));
assertEquals(test.getDayCount(), ACT_365F);
assertEquals(test.getFloatingRateName(), FloatingRateName.of("GBP-LIBOR"));
assertEquals(test.toString(), "GBP-LIBOR-3M");
}
public void test_gbpLibor3m_dates() {
IborIndex test = IborIndex.of("GBP-LIBOR-3M");
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 13), REF_DATA), date(2014, 10, 13));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 13), REF_DATA), date(2015, 1, 13));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 13), REF_DATA), date(2014, 10, 13));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 13), REF_DATA), date(2015, 1, 13));
// weekend
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 10), REF_DATA), date(2014, 10, 10));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 10), REF_DATA), date(2015, 1, 12));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 10), REF_DATA), date(2014, 10, 10));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 10), REF_DATA), date(2015, 1, 12));
// input date is Sunday
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 12), REF_DATA), date(2014, 10, 13));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 12), REF_DATA), date(2015, 1, 13));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 12), REF_DATA), date(2014, 10, 13));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 12), REF_DATA), date(2015, 1, 13));
// fixing time and zone
assertEquals(test.calculateFixingDateTime(date(2014, 10, 13)),
date(2014, 10, 13).atTime(LocalTime.of(11, 0)).atZone(ZoneId.of("Europe/London")));
// resolve
assertEquals(test.resolve(REF_DATA).apply(date(2014, 10, 13)), IborIndexObservation.of(test, date(2014, 10, 13), REF_DATA));
}
public void test_getFloatingRateName() {
for (IborIndex index : IborIndex.extendedEnum().lookupAll().values()) {
String name = index.getName().substring(0, index.getName().lastIndexOf('-'));
assertEquals(index.getFloatingRateName(), FloatingRateName.of(name));
}
}
//-------------------------------------------------------------------------
public void test_usdLibor3m() {
IborIndex test = IborIndex.of("USD-LIBOR-3M");
assertEquals(test.getCurrency(), USD);
assertEquals(test.getName(), "USD-LIBOR-3M");
assertEquals(test.getTenor(), TENOR_3M);
assertEquals(test.getFixingCalendar(), GBLO);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-2, GBLO));
assertEquals(test.getEffectiveDateOffset(),
DaysAdjustment.ofBusinessDays(2, GBLO, BusinessDayAdjustment.of(FOLLOWING, GBLO.combinedWith(USNY))));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.ofLastBusinessDay(TENOR_3M, BusinessDayAdjustment.of(MODIFIED_FOLLOWING, GBLO.combinedWith(USNY))));
assertEquals(test.getDayCount(), ACT_360);
assertEquals(test.getFloatingRateName(), FloatingRateName.of("USD-LIBOR"));
assertEquals(test.toString(), "USD-LIBOR-3M");
}
public void test_usdLibor3m_dates() {
IborIndex test = IborIndex.of("USD-LIBOR-3M");
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 27), REF_DATA), date(2014, 10, 29));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 27), REF_DATA), date(2015, 1, 29));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 29), REF_DATA), date(2014, 10, 27));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 29), REF_DATA), date(2015, 1, 29));
// weekend
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 10), REF_DATA), date(2014, 10, 14));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 10), REF_DATA), date(2015, 1, 14));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 14), REF_DATA), date(2014, 10, 10));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 14), REF_DATA), date(2015, 1, 14));
// effective date is US holiday
assertEquals(test.calculateEffectiveFromFixing(date(2015, 1, 16), REF_DATA), date(2015, 1, 20));
assertEquals(test.calculateMaturityFromFixing(date(2015, 1, 16), REF_DATA), date(2015, 4, 20));
assertEquals(test.calculateFixingFromEffective(date(2015, 1, 20), REF_DATA), date(2015, 1, 16));
assertEquals(test.calculateMaturityFromEffective(date(2015, 1, 20), REF_DATA), date(2015, 4, 20));
// input date is Sunday, 13th is US holiday, but not UK holiday (can fix, but not be effective)
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 12), REF_DATA), date(2014, 10, 15));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 12), REF_DATA), date(2015, 1, 15));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 12), REF_DATA), date(2014, 10, 10));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 12), REF_DATA), date(2015, 1, 14));
// fixing time and zone
assertEquals(test.calculateFixingDateTime(date(2014, 10, 13)),
date(2014, 10, 13).atTime(LocalTime.of(11, 0)).atZone(ZoneId.of("Europe/London")));
// resolve
assertEquals(test.resolve(REF_DATA).apply(date(2014, 10, 27)), IborIndexObservation.of(test, date(2014, 10, 27), REF_DATA));
}
public void test_euribor3m() {
IborIndex test = IborIndex.of("EUR-EURIBOR-3M");
assertEquals(test.getCurrency(), EUR);
assertEquals(test.getName(), "EUR-EURIBOR-3M");
assertEquals(test.getTenor(), TENOR_3M);
assertEquals(test.getFixingCalendar(), EUTA);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-2, EUTA));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofBusinessDays(2, EUTA));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.ofLastBusinessDay(TENOR_3M, BusinessDayAdjustment.of(MODIFIED_FOLLOWING, EUTA)));
assertEquals(test.getDayCount(), ACT_360);
assertEquals(test.getFloatingRateName(), FloatingRateName.of("EUR-EURIBOR"));
assertEquals(test.toString(), "EUR-EURIBOR-3M");
}
public void test_euribor3m_dates() {
IborIndex test = IborIndex.of("EUR-EURIBOR-3M");
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 27), REF_DATA), date(2014, 10, 29));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 27), REF_DATA), date(2015, 1, 29));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 29), REF_DATA), date(2014, 10, 27));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 29), REF_DATA), date(2015, 1, 29));
// weekend
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 10), REF_DATA), date(2014, 10, 14));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 10), REF_DATA), date(2015, 1, 14));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 14), REF_DATA), date(2014, 10, 10));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 14), REF_DATA), date(2015, 1, 14));
// input date is Sunday
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 12), REF_DATA), date(2014, 10, 15));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 12), REF_DATA), date(2015, 1, 15));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 12), REF_DATA), date(2014, 10, 9));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 12), REF_DATA), date(2015, 1, 13));
// fixing time and zone
assertEquals(test.calculateFixingDateTime(date(2014, 10, 13)),
date(2014, 10, 13).atTime(LocalTime.of(11, 0)).atZone(ZoneId.of("Europe/Brussels")));
}
public void test_tibor_japan3m() {
IborIndex test = IborIndex.of("JPY-TIBOR-JAPAN-3M");
assertEquals(test.getCurrency(), JPY);
assertEquals(test.getName(), "JPY-TIBOR-JAPAN-3M");
assertEquals(test.getTenor(), TENOR_3M);
assertEquals(test.getFixingCalendar(), JPTO);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-2, JPTO));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofBusinessDays(2, JPTO));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.ofLastBusinessDay(TENOR_3M, BusinessDayAdjustment.of(MODIFIED_FOLLOWING, JPTO)));
assertEquals(test.getDayCount(), ACT_365F);
assertEquals(test.getFloatingRateName(), FloatingRateName.of("JPY-TIBOR-JAPAN"));
assertEquals(test.toString(), "JPY-TIBOR-JAPAN-3M");
}
public void test_tibor_japan3m_dates() {
IborIndex test = IborIndex.of("JPY-TIBOR-JAPAN-3M");
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 27), REF_DATA), date(2014, 10, 29));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 27), REF_DATA), date(2015, 1, 29));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 29), REF_DATA), date(2014, 10, 27));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 29), REF_DATA), date(2015, 1, 29));
// weekend
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 10), REF_DATA), date(2014, 10, 15));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 10), REF_DATA), date(2015, 1, 15));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 15), REF_DATA), date(2014, 10, 10));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 15), REF_DATA), date(2015, 1, 15));
// input date is Sunday
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 12), REF_DATA), date(2014, 10, 16));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 12), REF_DATA), date(2015, 1, 16));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 12), REF_DATA), date(2014, 10, 9));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 12), REF_DATA), date(2015, 1, 14));
// fixing time and zone
assertEquals(test.calculateFixingDateTime(date(2014, 10, 13)),
date(2014, 10, 13).atTime(LocalTime.of(11, 50)).atZone(ZoneId.of("Asia/Tokyo")));
}
public void test_tibor_euroyen3m() {
IborIndex test = IborIndex.of("JPY-TIBOR-EUROYEN-3M");
assertEquals(test.getCurrency(), JPY);
assertEquals(test.getName(), "JPY-TIBOR-EUROYEN-3M");
assertEquals(test.getTenor(), TENOR_3M);
assertEquals(test.getFixingCalendar(), JPTO);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-2, JPTO));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofBusinessDays(2, JPTO));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.ofLastBusinessDay(TENOR_3M, BusinessDayAdjustment.of(MODIFIED_FOLLOWING, JPTO)));
assertEquals(test.getDayCount(), ACT_360);
assertEquals(test.getFloatingRateName(), FloatingRateName.of("JPY-TIBOR-EUROYEN"));
assertEquals(test.toString(), "JPY-TIBOR-EUROYEN-3M");
}
public void test_tibor_euroyen3m_dates() {
IborIndex test = IborIndex.of("JPY-TIBOR-EUROYEN-3M");
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 27), REF_DATA), date(2014, 10, 29));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 27), REF_DATA), date(2015, 1, 29));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 29), REF_DATA), date(2014, 10, 27));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 29), REF_DATA), date(2015, 1, 29));
// weekend
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 10), REF_DATA), date(2014, 10, 15));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 10), REF_DATA), date(2015, 1, 15));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 15), REF_DATA), date(2014, 10, 10));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 15), REF_DATA), date(2015, 1, 15));
// input date is Sunday
assertEquals(test.calculateEffectiveFromFixing(date(2014, 10, 12), REF_DATA), date(2014, 10, 16));
assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 12), REF_DATA), date(2015, 1, 16));
assertEquals(test.calculateFixingFromEffective(date(2014, 10, 12), REF_DATA), date(2014, 10, 9));
assertEquals(test.calculateMaturityFromEffective(date(2014, 10, 12), REF_DATA), date(2015, 1, 14));
// fixing time and zone
assertEquals(test.calculateFixingDateTime(date(2014, 10, 13)),
date(2014, 10, 13).atTime(LocalTime.of(11, 50)).atZone(ZoneId.of("Asia/Tokyo")));
}
public void test_usdLibor_all() {
assertEquals(IborIndex.of("USD-LIBOR-1W").getName(), "USD-LIBOR-1W");
assertEquals(IborIndex.of("USD-LIBOR-1W"), IborIndices.USD_LIBOR_1W);
assertEquals(IborIndex.of("USD-LIBOR-1M").getName(), "USD-LIBOR-1M");
assertEquals(IborIndex.of("USD-LIBOR-1M"), IborIndices.USD_LIBOR_1M);
assertEquals(IborIndex.of("USD-LIBOR-2M").getName(), "USD-LIBOR-2M");
assertEquals(IborIndex.of("USD-LIBOR-2M"), IborIndices.USD_LIBOR_2M);
assertEquals(IborIndex.of("USD-LIBOR-3M").getName(), "USD-LIBOR-3M");
assertEquals(IborIndex.of("USD-LIBOR-3M"), IborIndices.USD_LIBOR_3M);
assertEquals(IborIndex.of("USD-LIBOR-6M").getName(), "USD-LIBOR-6M");
assertEquals(IborIndex.of("USD-LIBOR-6M"), IborIndices.USD_LIBOR_6M);
assertEquals(IborIndex.of("USD-LIBOR-12M").getName(), "USD-LIBOR-12M");
assertEquals(IborIndex.of("USD-LIBOR-12M"), IborIndices.USD_LIBOR_12M);
}
public void test_bbsw1m() {
IborIndex test = IborIndex.of("AUD-BBSW-1M");
assertEquals(test.getCurrency(), AUD);
assertEquals(test.getName(), "AUD-BBSW-1M");
assertEquals(test.getTenor(), TENOR_1M);
assertEquals(test.getFixingCalendar(), AUSY);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-1, AUSY));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofBusinessDays(1, AUSY));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.of(TENOR_1M, PeriodAdditionConventions.NONE, BusinessDayAdjustment.of(FOLLOWING, AUSY)));
assertEquals(test.getDayCount(), ACT_365F);
assertEquals(test.toString(), "AUD-BBSW-1M");
}
public void test_bbsw2m() {
IborIndex test = IborIndex.of("AUD-BBSW-2M");
assertEquals(test.getCurrency(), AUD);
assertEquals(test.getName(), "AUD-BBSW-2M");
assertEquals(test.getTenor(), TENOR_2M);
assertEquals(test.getFixingCalendar(), AUSY);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-1, AUSY));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofBusinessDays(1, AUSY));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.of(TENOR_2M, PeriodAdditionConventions.NONE, BusinessDayAdjustment.of(FOLLOWING, AUSY)));
assertEquals(test.getDayCount(), ACT_365F);
assertEquals(test.toString(), "AUD-BBSW-2M");
}
public void test_bbsw3m() {
IborIndex test = IborIndex.of("AUD-BBSW-3M");
assertEquals(test.getCurrency(), AUD);
assertEquals(test.getName(), "AUD-BBSW-3M");
assertEquals(test.getTenor(), TENOR_3M);
assertEquals(test.getFixingCalendar(), AUSY);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-1, AUSY));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofBusinessDays(1, AUSY));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.of(TENOR_3M, PeriodAdditionConventions.NONE, BusinessDayAdjustment.of(FOLLOWING, AUSY)));
assertEquals(test.getDayCount(), ACT_365F);
assertEquals(test.toString(), "AUD-BBSW-3M");
}
public void test_bbsw4m() {
IborIndex test = IborIndex.of("AUD-BBSW-4M");
assertEquals(test.getCurrency(), AUD);
assertEquals(test.getName(), "AUD-BBSW-4M");
assertEquals(test.getTenor(), TENOR_4M);
assertEquals(test.getFixingCalendar(), AUSY);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-1, AUSY));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofBusinessDays(1, AUSY));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.of(TENOR_4M, PeriodAdditionConventions.NONE, BusinessDayAdjustment.of(FOLLOWING, AUSY)));
assertEquals(test.getDayCount(), ACT_365F);
assertEquals(test.toString(), "AUD-BBSW-4M");
}
public void test_bbsw5m() {
IborIndex test = IborIndex.of("AUD-BBSW-5M");
assertEquals(test.getCurrency(), AUD);
assertEquals(test.getName(), "AUD-BBSW-5M");
assertEquals(test.getTenor(), TENOR_5M);
assertEquals(test.getFixingCalendar(), AUSY);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-1, AUSY));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofBusinessDays(1, AUSY));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.of(TENOR_5M, PeriodAdditionConventions.NONE, BusinessDayAdjustment.of(FOLLOWING, AUSY)));
assertEquals(test.getDayCount(), ACT_365F);
assertEquals(test.toString(), "AUD-BBSW-5M");
}
public void test_bbsw6m() {
IborIndex test = IborIndex.of("AUD-BBSW-6M");
assertEquals(test.getCurrency(), AUD);
assertEquals(test.getName(), "AUD-BBSW-6M");
assertEquals(test.getTenor(), TENOR_6M);
assertEquals(test.getFixingCalendar(), AUSY);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-1, AUSY));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofBusinessDays(1, AUSY));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.of(TENOR_6M, PeriodAdditionConventions.NONE, BusinessDayAdjustment.of(FOLLOWING, AUSY)));
assertEquals(test.getDayCount(), ACT_365F);
assertEquals(test.toString(), "AUD-BBSW-6M");
}
public void test_czk_pribor() {
IborIndex test = IborIndex.of("CZK-PRIBOR-3M");
assertEquals(test.getCurrency(), CZK);
assertEquals(test.getName(), "CZK-PRIBOR-3M");
assertEquals(test.getTenor(), TENOR_3M);
assertEquals(test.getFixingCalendar(), CZPR);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-2, CZPR));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofBusinessDays(2, CZPR));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.of(TENOR_3M, PeriodAdditionConventions.NONE, BusinessDayAdjustment.of(FOLLOWING, CZPR)));
assertEquals(test.getDayCount(), ACT_360);
assertEquals(test.toString(), "CZK-PRIBOR-3M");
}
public void test_dkk_cibor() {
IborIndex test = IborIndex.of("DKK-CIBOR-3M");
assertEquals(test.getCurrency(), DKK);
assertEquals(test.getName(), "DKK-CIBOR-3M");
assertEquals(test.getTenor(), TENOR_3M);
assertEquals(test.getFixingCalendar(), DKCO);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofCalendarDays(0, BusinessDayAdjustment.of(PRECEDING, DKCO)));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofCalendarDays(0, BusinessDayAdjustment.of(FOLLOWING, DKCO)));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.of(TENOR_3M, PeriodAdditionConventions.NONE, BusinessDayAdjustment.of(FOLLOWING, DKCO)));
assertEquals(test.getDayCount(), ACT_360);
assertEquals(test.toString(), "DKK-CIBOR-3M");
}
public void test_huf_bubor() {
IborIndex test = IborIndex.of("HUF-BUBOR-3M");
assertEquals(test.getCurrency(), HUF);
assertEquals(test.getName(), "HUF-BUBOR-3M");
assertEquals(test.getTenor(), TENOR_3M);
assertEquals(test.getFixingCalendar(), HUBU);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-2, HUBU));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofBusinessDays(2, HUBU));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.of(TENOR_3M, PeriodAdditionConventions.NONE, BusinessDayAdjustment.of(FOLLOWING, HUBU)));
assertEquals(test.getDayCount(), ACT_360);
assertEquals(test.toString(), "HUF-BUBOR-3M");
}
public void test_mxn_tiie() {
IborIndex test = IborIndex.of("MXN-TIIE-4W");
assertEquals(test.getCurrency(), MXN);
assertEquals(test.getName(), "MXN-TIIE-4W");
assertEquals(test.getTenor(), TENOR_4W);
assertEquals(test.getFixingCalendar(), MXMC);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-1, MXMC));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofBusinessDays(1, MXMC));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.of(TENOR_4W, PeriodAdditionConventions.NONE, BusinessDayAdjustment.of(FOLLOWING, MXMC)));
assertEquals(test.getDayCount(), ACT_360);
assertEquals(test.toString(), "MXN-TIIE-4W");
}
public void test_pln_wibor() {
IborIndex test = IborIndex.of("PLN-WIBOR-3M");
assertEquals(test.getCurrency(), PLN);
assertEquals(test.getName(), "PLN-WIBOR-3M");
assertEquals(test.getTenor(), TENOR_3M);
assertEquals(test.getFixingCalendar(), PLWA);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-2, PLWA));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofBusinessDays(2, PLWA));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.of(TENOR_3M, PeriodAdditionConventions.NONE, BusinessDayAdjustment.of(FOLLOWING, PLWA)));
assertEquals(test.getDayCount(), ACT_365F);
assertEquals(test.toString(), "PLN-WIBOR-3M");
}
public void test_sek_stibor() {
IborIndex test = IborIndex.of("SEK-STIBOR-3M");
assertEquals(test.getCurrency(), SEK);
assertEquals(test.getName(), "SEK-STIBOR-3M");
assertEquals(test.getTenor(), TENOR_3M);
assertEquals(test.getFixingCalendar(), SEST);
assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-2, SEST));
assertEquals(test.getEffectiveDateOffset(), DaysAdjustment.ofBusinessDays(2, SEST));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.of(TENOR_3M, PeriodAdditionConventions.NONE, BusinessDayAdjustment.of(FOLLOWING, SEST)));
assertEquals(test.getDayCount(), ACT_360);
assertEquals(test.toString(), "SEK-STIBOR-3M");
}
public void test_zar_jibar() {
IborIndex test = IborIndex.of("ZAR-JIBAR-3M");
assertEquals(test.getCurrency(), ZAR);
assertEquals(test.getName(), "ZAR-JIBAR-3M");
assertEquals(test.getTenor(), TENOR_3M);
assertEquals(test.getFixingCalendar(), ZAJO);
assertEquals(test.getFixingDateOffset(),
DaysAdjustment.ofCalendarDays(0, BusinessDayAdjustment.of(PRECEDING, ZAJO)));
assertEquals(test.getEffectiveDateOffset(),
DaysAdjustment.ofCalendarDays(0, BusinessDayAdjustment.of(FOLLOWING, ZAJO)));
assertEquals(test.getMaturityDateOffset(),
TenorAdjustment.of(TENOR_3M, PeriodAdditionConventions.NONE, BusinessDayAdjustment.of(FOLLOWING, ZAJO)));
assertEquals(test.getDayCount(), ACT_365F);
assertEquals(test.toString(), "ZAR-JIBAR-3M");
}
//-------------------------------------------------------------------------
@DataProvider(name = "name")
static Object[][] data_name() {
return new Object[][] {
{IborIndices.GBP_LIBOR_6M, "GBP-LIBOR-6M"},
{IborIndices.CHF_LIBOR_6M, "CHF-LIBOR-6M"},
{IborIndices.EUR_LIBOR_6M, "EUR-LIBOR-6M"},
{IborIndices.JPY_LIBOR_6M, "JPY-LIBOR-6M"},
{IborIndices.USD_LIBOR_6M, "USD-LIBOR-6M"},
{IborIndices.EUR_EURIBOR_1M, "EUR-EURIBOR-1M"},
{IborIndices.JPY_TIBOR_JAPAN_2M, "JPY-TIBOR-JAPAN-2M"},
{IborIndices.JPY_TIBOR_EUROYEN_6M, "JPY-TIBOR-EUROYEN-6M"},
{IborIndices.AUD_BBSW_1M, "AUD-BBSW-1M"},
{IborIndices.AUD_BBSW_2M, "AUD-BBSW-2M"},
{IborIndices.AUD_BBSW_3M, "AUD-BBSW-3M"},
{IborIndices.AUD_BBSW_4M, "AUD-BBSW-4M"},
{IborIndices.AUD_BBSW_5M, "AUD-BBSW-5M"},
{IborIndices.AUD_BBSW_6M, "AUD-BBSW-6M"},
};
}
@Test(dataProvider = "name")
public void test_name(IborIndex convention, String name) {
assertEquals(convention.getName(), name);
}
@Test(dataProvider = "name")
public void test_toString(IborIndex convention, String name) {
assertEquals(convention.toString(), name);
}
@Test(dataProvider = "name")
public void test_of_lookup(IborIndex convention, String name) {
assertEquals(IborIndex.of(name), convention);
}
@Test(dataProvider = "name")
public void test_extendedEnum(IborIndex convention, String name) {
ImmutableMap<String, IborIndex> map = IborIndex.extendedEnum().lookupAll();
assertEquals(map.get(name), convention);
}
public void test_of_lookup_notFound() {
assertThrowsIllegalArg(() -> IborIndex.of("Rubbish"));
}
public void test_of_lookup_null() {
assertThrowsIllegalArg(() -> IborIndex.of(null));
}
//-------------------------------------------------------------------------
public void test_equals() {
ImmutableIborIndex a = ImmutableIborIndex.builder()
.name("Test-3M")
.currency(Currency.GBP)
.fixingCalendar(GBLO)
.fixingDateOffset(DaysAdjustment.ofBusinessDays(-2, GBLO))
.effectiveDateOffset(DaysAdjustment.ofBusinessDays(2, GBLO))
.maturityDateOffset(TenorAdjustment.ofLastBusinessDay(TENOR_3M, BusinessDayAdjustment.NONE))
.dayCount(ACT_360)
.fixingTime(LocalTime.NOON)
.fixingZone(ZoneId.of("Europe/London"))
.build();
IborIndex b = a.toBuilder().name("Rubbish-3M").build();
assertEquals(a.equals(b), false);
}
//-------------------------------------------------------------------------
public void coverage() {
ImmutableIborIndex index = ImmutableIborIndex.builder()
.name("Test-3M")
.currency(Currency.GBP)
.fixingCalendar(GBLO)
.fixingDateOffset(DaysAdjustment.ofBusinessDays(-2, GBLO))
.effectiveDateOffset(DaysAdjustment.ofBusinessDays(2, GBLO))
.maturityDateOffset(TenorAdjustment.ofLastBusinessDay(TENOR_3M, BusinessDayAdjustment.NONE))
.dayCount(ACT_360)
.fixingTime(LocalTime.NOON)
.fixingZone(ZoneId.of("Europe/London"))
.build();
coverImmutableBean(index);
coverPrivateConstructor(IborIndices.class);
}
public void test_jodaConvert() {
assertJodaConvert(IborIndex.class, IborIndices.GBP_LIBOR_12M);
}
public void test_serialization() {
IborIndex index = ImmutableIborIndex.builder()
.name("Test-3M")
.currency(Currency.GBP)
.fixingCalendar(GBLO)
.fixingDateOffset(DaysAdjustment.ofBusinessDays(-2, GBLO))
.effectiveDateOffset(DaysAdjustment.ofBusinessDays(2, GBLO))
.maturityDateOffset(TenorAdjustment.ofLastBusinessDay(TENOR_3M, BusinessDayAdjustment.NONE))
.dayCount(ACT_360)
.fixingTime(LocalTime.NOON)
.fixingZone(ZoneId.of("Europe/London"))
.build();
assertSerialization(index);
}
}