/** * Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.product.swap.type; import static com.opengamma.strata.basics.date.BusinessDayConventions.MODIFIED_FOLLOWING; 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.USNY; import static com.opengamma.strata.collect.TestHelper.coverPrivateConstructor; import static org.testng.Assert.assertEquals; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.opengamma.strata.basics.date.BusinessDayAdjustment; import com.opengamma.strata.basics.date.BusinessDayConvention; import com.opengamma.strata.basics.date.BusinessDayConventions; import com.opengamma.strata.basics.date.HolidayCalendarId; import com.opengamma.strata.basics.index.IborIndex; import com.opengamma.strata.basics.index.IborIndices; import com.opengamma.strata.basics.schedule.Frequency; /** * Test {@link XCcyIborIborSwapConventions}. */ @Test public class XCcyIborIborSwapConventionsTest { private static final HolidayCalendarId EUTA_USNY = EUTA.combinedWith(USNY); private static final HolidayCalendarId GBLO_USNY = GBLO.combinedWith(USNY); private static final HolidayCalendarId EUTA_GBLO = EUTA.combinedWith(GBLO); @DataProvider(name = "spotLag") static Object[][] data_spot_lag() { return new Object[][] { {XCcyIborIborSwapConventions.EUR_EURIBOR_3M_USD_LIBOR_3M, 2}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_USD_LIBOR_3M, 2}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_EUR_EURIBOR_3M, 2} }; } @Test(dataProvider = "spotLag") public void test_spot_lag(ImmutableXCcyIborIborSwapConvention convention, int lag) { assertEquals(convention.getSpotDateOffset().getDays(), lag); } //------------------------------------------------------------------------- @DataProvider(name = "period") static Object[][] data_period() { return new Object[][] { {XCcyIborIborSwapConventions.EUR_EURIBOR_3M_USD_LIBOR_3M, Frequency.P3M}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_USD_LIBOR_3M, Frequency.P3M}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_EUR_EURIBOR_3M, Frequency.P3M} }; } @Test(dataProvider = "period") public void test_period(XCcyIborIborSwapConvention convention, Frequency frequency) { assertEquals(convention.getSpreadLeg().getPaymentFrequency(), frequency); } //------------------------------------------------------------------------- @DataProvider(name = "spreadLegIndex") static Object[][] data_spread_leg() { return new Object[][] { {XCcyIborIborSwapConventions.EUR_EURIBOR_3M_USD_LIBOR_3M, IborIndices.EUR_EURIBOR_3M}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_USD_LIBOR_3M, IborIndices.GBP_LIBOR_3M}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_EUR_EURIBOR_3M, IborIndices.GBP_LIBOR_3M} }; } @Test(dataProvider = "spreadLegIndex") public void test_float_leg(XCcyIborIborSwapConvention convention, IborIndex index) { assertEquals(convention.getSpreadLeg().getIndex(), index); } //------------------------------------------------------------------------- @DataProvider(name = "spreadLegBda") static Object[][] data_spread_leg_bda() { return new Object[][] { {XCcyIborIborSwapConventions.EUR_EURIBOR_3M_USD_LIBOR_3M, BusinessDayAdjustment.of(MODIFIED_FOLLOWING, EUTA_USNY)}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_USD_LIBOR_3M, BusinessDayAdjustment.of(MODIFIED_FOLLOWING, GBLO_USNY)}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_EUR_EURIBOR_3M, BusinessDayAdjustment.of(MODIFIED_FOLLOWING, EUTA_GBLO)} }; } @Test(dataProvider = "spreadLegBda") public void test_spread_leg_bdc(XCcyIborIborSwapConvention convention, BusinessDayAdjustment bda) { assertEquals(convention.getSpreadLeg().getAccrualBusinessDayAdjustment(), bda); } //------------------------------------------------------------------------- @DataProvider(name = "flatLegIndex") static Object[][] data_flat_leg() { return new Object[][] { {XCcyIborIborSwapConventions.EUR_EURIBOR_3M_USD_LIBOR_3M, IborIndices.USD_LIBOR_3M}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_USD_LIBOR_3M, IborIndices.USD_LIBOR_3M}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_EUR_EURIBOR_3M, IborIndices.EUR_EURIBOR_3M} }; } @Test(dataProvider = "flatLegIndex") public void test_flat_leg(XCcyIborIborSwapConvention convention, IborIndex index) { assertEquals(convention.getFlatLeg().getIndex(), index); } //------------------------------------------------------------------------- @DataProvider(name = "flatLegBda") static Object[][] data_flat_leg_bda() { return new Object[][] { {XCcyIborIborSwapConventions.EUR_EURIBOR_3M_USD_LIBOR_3M, BusinessDayAdjustment.of(MODIFIED_FOLLOWING, EUTA_USNY)}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_USD_LIBOR_3M, BusinessDayAdjustment.of(MODIFIED_FOLLOWING, GBLO_USNY)}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_EUR_EURIBOR_3M, BusinessDayAdjustment.of(MODIFIED_FOLLOWING, EUTA_GBLO)} }; } @Test(dataProvider = "flatLegBda") public void test_flat_leg_bdc(XCcyIborIborSwapConvention convention, BusinessDayAdjustment bda) { assertEquals(convention.getFlatLeg().getAccrualBusinessDayAdjustment(), bda); } //------------------------------------------------------------------------- @DataProvider(name = "dayConvention") static Object[][] data_day_convention() { return new Object[][] { {XCcyIborIborSwapConventions.EUR_EURIBOR_3M_USD_LIBOR_3M, BusinessDayConventions.MODIFIED_FOLLOWING}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_USD_LIBOR_3M, BusinessDayConventions.MODIFIED_FOLLOWING}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_EUR_EURIBOR_3M, BusinessDayConventions.MODIFIED_FOLLOWING} }; } @Test(dataProvider = "dayConvention") public void test_day_convention(XCcyIborIborSwapConvention convention, BusinessDayConvention dayConvention) { assertEquals(convention.getSpreadLeg().getAccrualBusinessDayAdjustment().getConvention(), dayConvention); } //------------------------------------------------------------------------- @DataProvider(name = "notionalExchange") static Object[][] data_notional_exchange() { return new Object[][] { {XCcyIborIborSwapConventions.EUR_EURIBOR_3M_USD_LIBOR_3M, true}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_USD_LIBOR_3M, true}, {XCcyIborIborSwapConventions.GBP_LIBOR_3M_EUR_EURIBOR_3M, true} }; } @Test(dataProvider = "notionalExchange") public void test_notional_exchange(XCcyIborIborSwapConvention convention, boolean notionalExchange) { assertEquals(convention.getSpreadLeg().isNotionalExchange(), notionalExchange); assertEquals(convention.getFlatLeg().isNotionalExchange(), notionalExchange); } //------------------------------------------------------------------------- public void coverage() { coverPrivateConstructor(XCcyIborIborSwapConventions.class); coverPrivateConstructor(StandardXCcyIborIborSwapConventions.class); } }