/**
* 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.collect.TestHelper.assertJodaConvert;
import static com.opengamma.strata.collect.TestHelper.assertSerialization;
import static com.opengamma.strata.collect.TestHelper.assertThrows;
import static com.opengamma.strata.collect.TestHelper.assertThrowsIllegalArg;
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 static org.testng.Assert.assertNotNull;
import org.joda.beans.ImmutableBean;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.opengamma.strata.basics.currency.Currency;
import com.opengamma.strata.basics.date.Tenor;
/**
* Test {@link FloatingRateName}.
*/
@Test
public class FloatingRateNameTest {
//-------------------------------------------------------------------------
@DataProvider(name = "nameType")
static Object[][] data_name_type() {
return new Object[][] {
{"GBP-LIBOR", "GBP-LIBOR-", FloatingRateType.IBOR},
{"GBP-LIBOR-BBA", "GBP-LIBOR-", FloatingRateType.IBOR},
{"CHF-LIBOR", "CHF-LIBOR-", FloatingRateType.IBOR},
{"CHF-LIBOR-BBA", "CHF-LIBOR-", FloatingRateType.IBOR},
{"EUR-LIBOR", "EUR-LIBOR-", FloatingRateType.IBOR},
{"EUR-LIBOR-BBA", "EUR-LIBOR-", FloatingRateType.IBOR},
{"JPY-LIBOR", "JPY-LIBOR-", FloatingRateType.IBOR},
{"JPY-LIBOR-BBA", "JPY-LIBOR-", FloatingRateType.IBOR},
{"USD-LIBOR", "USD-LIBOR-", FloatingRateType.IBOR},
{"USD-LIBOR-BBA", "USD-LIBOR-", FloatingRateType.IBOR},
{"EUR-EURIBOR", "EUR-EURIBOR-", FloatingRateType.IBOR},
{"EUR-EURIBOR-Reuters", "EUR-EURIBOR-", FloatingRateType.IBOR},
{"JPY-TIBOR-JAPAN", "JPY-TIBOR-JAPAN-", FloatingRateType.IBOR},
{"JPY-TIBOR-TIBM", "JPY-TIBOR-JAPAN-", FloatingRateType.IBOR},
{"GBP-SONIA", "GBP-SONIA", FloatingRateType.OVERNIGHT_COMPOUNDED},
{"GBP-WMBA-SONIA-COMPOUND", "GBP-SONIA", FloatingRateType.OVERNIGHT_COMPOUNDED},
{"CHF-TOIS", "CHF-TOIS", FloatingRateType.OVERNIGHT_COMPOUNDED},
{"CHF-TOIS-OIS-COMPOUND", "CHF-TOIS", FloatingRateType.OVERNIGHT_COMPOUNDED},
{"EUR-EONIA", "EUR-EONIA", FloatingRateType.OVERNIGHT_COMPOUNDED},
{"EUR-EONIA-OIS-COMPOUND", "EUR-EONIA", FloatingRateType.OVERNIGHT_COMPOUNDED},
{"JPY-TONAR", "JPY-TONAR", FloatingRateType.OVERNIGHT_COMPOUNDED},
{"JPY-TONA-OIS-COMPOUND", "JPY-TONAR", FloatingRateType.OVERNIGHT_COMPOUNDED},
{"USD-FED-FUND", "USD-FED-FUND", FloatingRateType.OVERNIGHT_COMPOUNDED},
{"USD-Federal Funds-H.15-OIS-COMPOUND", "USD-FED-FUND", FloatingRateType.OVERNIGHT_COMPOUNDED},
{"USD-FED-FUND-AVG", "USD-FED-FUND-AVG", FloatingRateType.OVERNIGHT_AVERAGED},
{"USD-Federal Funds-H.15", "USD-FED-FUND-AVG", FloatingRateType.OVERNIGHT_AVERAGED},
{"GB-HICP", "GB-HICP", FloatingRateType.PRICE},
{"UK-HICP", "GB-HICP", FloatingRateType.PRICE},
{"GB-RPI", "GB-RPI", FloatingRateType.PRICE},
{"UK-RPI", "GB-RPI", FloatingRateType.PRICE},
{"GB-RPIX", "GB-RPIX", FloatingRateType.PRICE},
{"UK-RPIX", "GB-RPIX", FloatingRateType.PRICE},
{"CH-CPI", "CH-CPI", FloatingRateType.PRICE},
{"SWF-CPI", "CH-CPI", FloatingRateType.PRICE},
{"EU-AI-CPI", "EU-AI-CPI", FloatingRateType.PRICE},
{"EUR-AI-CPI", "EU-AI-CPI", FloatingRateType.PRICE},
{"EU-EXT-CPI", "EU-EXT-CPI", FloatingRateType.PRICE},
{"EUR-EXT-CPI", "EU-EXT-CPI", FloatingRateType.PRICE},
{"JP-CPI-EXF", "JP-CPI-EXF", FloatingRateType.PRICE},
{"JPY-CPI-EXF", "JP-CPI-EXF", FloatingRateType.PRICE},
{"US-CPI-U", "US-CPI-U", FloatingRateType.PRICE},
{"USA-CPI-U", "US-CPI-U", FloatingRateType.PRICE},
{"FR-EXT-CPI", "FR-EXT-CPI", FloatingRateType.PRICE},
{"FRC-EXT-CPI", "FR-EXT-CPI", FloatingRateType.PRICE},
};
}
@Test(dataProvider = "nameType")
public void test_name(String name, String indexName, FloatingRateType type) {
FloatingRateName convention = FloatingRateName.of(name);
assertEquals(convention.getName(), name);
assertEquals(convention.getType(), type);
}
@Test(dataProvider = "nameType")
public void test_toString(String name, String indexName, FloatingRateType type) {
FloatingRateName convention = FloatingRateName.of(name);
assertEquals(convention.toString(), name);
}
@Test(dataProvider = "nameType")
public void test_of_lookup(String name, String indexName, FloatingRateType type) {
FloatingRateName convention = FloatingRateName.of(name);
assertEquals(FloatingRateName.of(name), convention);
}
public void test_of_lookup_notFound() {
assertThrowsIllegalArg(() -> FloatingRateName.of("Rubbish"));
}
public void test_of_lookup_null() {
assertThrowsIllegalArg(() -> FloatingRateName.of(null));
}
//-------------------------------------------------------------------------
public void test_defaultIborIndex() {
assertEquals(FloatingRateName.defaultIborIndex(Currency.GBP), FloatingRateName.of("GBP-LIBOR"));
assertEquals(FloatingRateName.defaultIborIndex(Currency.EUR), FloatingRateName.of("EUR-EURIBOR"));
assertEquals(FloatingRateName.defaultIborIndex(Currency.USD), FloatingRateName.of("USD-LIBOR"));
}
public void test_defaultOvernightIndex() {
assertEquals(FloatingRateName.defaultOvernightIndex(Currency.GBP), FloatingRateName.of("GBP-SONIA"));
assertEquals(FloatingRateName.defaultOvernightIndex(Currency.EUR), FloatingRateName.of("EUR-EONIA"));
assertEquals(FloatingRateName.defaultOvernightIndex(Currency.USD), FloatingRateName.of("USD-FED-FUND"));
}
//-------------------------------------------------------------------------
public void test_normalized() {
assertEquals(FloatingRateName.of("GBP-LIBOR-BBA").normalized(), FloatingRateName.of("GBP-LIBOR"));
assertEquals(FloatingRateName.of("GBP-WMBA-SONIA-COMPOUND").normalized(), FloatingRateName.of("GBP-SONIA"));
for (FloatingRateName name : FloatingRateName.extendedEnum().lookupAll().values()) {
assertNotNull(name.normalized());
}
}
//-------------------------------------------------------------------------
public void test_toIborIndex_tenor() {
assertEquals(FloatingRateName.of("GBP-LIBOR-BBA").toIborIndex(Tenor.TENOR_6M), IborIndices.GBP_LIBOR_6M);
assertEquals(FloatingRateName.of("GBP-LIBOR-BBA").toIborIndex(Tenor.TENOR_12M), IborIndices.GBP_LIBOR_12M);
assertEquals(FloatingRateName.of("GBP-LIBOR-BBA").toIborIndex(Tenor.TENOR_1Y), IborIndices.GBP_LIBOR_12M);
assertThrows(() -> FloatingRateName.of("GBP-WMBA-SONIA-COMPOUND").toIborIndex(Tenor.TENOR_6M), IllegalStateException.class);
assertEquals(
ImmutableList.copyOf(FloatingRateName.of("GBP-LIBOR-BBA").getTenors()),
ImmutableList.of(Tenor.TENOR_1W, Tenor.TENOR_1M, Tenor.TENOR_2M, Tenor.TENOR_3M, Tenor.TENOR_6M, Tenor.TENOR_12M));
}
public void test_toOvernightIndex() {
assertEquals(FloatingRateName.of("GBP-WMBA-SONIA-COMPOUND").toOvernightIndex(), OvernightIndices.GBP_SONIA);
assertEquals(FloatingRateNames.USD_FED_FUND.toOvernightIndex(), OvernightIndices.USD_FED_FUND);
assertEquals(FloatingRateNames.USD_FED_FUND_AVG.toOvernightIndex(), OvernightIndices.USD_FED_FUND);
assertThrows(() -> FloatingRateName.of("GBP-LIBOR-BBA").toOvernightIndex(), IllegalStateException.class);
assertEquals(FloatingRateName.of("GBP-WMBA-SONIA-COMPOUND").getTenors(), ImmutableSet.of());
}
public void test_toPriceIndex() {
assertEquals(FloatingRateName.of("UK-HICP").toPriceIndex(), PriceIndices.GB_HICP);
assertThrows(() -> FloatingRateName.of("GBP-LIBOR-BBA").toPriceIndex(), IllegalStateException.class);
assertEquals(FloatingRateName.of("UK-HICP").getTenors(), ImmutableSet.of());
}
//-------------------------------------------------------------------------
public void coverage() {
coverPrivateConstructor(FloatingRateNames.class);
ImmutableBean test = (ImmutableBean) FloatingRateName.of("GBP-LIBOR-BBA");
coverImmutableBean(test);
coverBeanEquals(test, (ImmutableBean) FloatingRateName.of("USD-Federal Funds-H.15"));
}
public void test_jodaConvert() {
assertJodaConvert(FloatingRateName.class, FloatingRateName.of("GBP-LIBOR-BBA"));
}
public void test_serialization() {
assertSerialization(FloatingRateName.of("GBP-LIBOR-BBA"));
}
}