/** * Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies * <p> * Please see distribution for license. */ package com.opengamma.strata.product.credit.type; import static com.opengamma.strata.basics.currency.Currency.USD; import static com.opengamma.strata.basics.date.BusinessDayConventions.FOLLOWING; import static com.opengamma.strata.basics.date.DayCounts.ACT_360; import static com.opengamma.strata.basics.date.HolidayCalendarIds.USNY; import static com.opengamma.strata.basics.schedule.Frequency.P3M; import static com.opengamma.strata.basics.schedule.RollConventions.DAY_20; import static com.opengamma.strata.basics.schedule.StubConvention.SHORT_INITIAL; import static com.opengamma.strata.collect.TestHelper.date; import static com.opengamma.strata.product.common.BuySell.BUY; import static org.testng.Assert.assertEquals; import java.time.Period; import org.testng.annotations.Test; import com.opengamma.strata.basics.ReferenceData; import com.opengamma.strata.basics.StandardId; import com.opengamma.strata.basics.date.BusinessDayAdjustment; import com.opengamma.strata.product.credit.CdsTestUtils; import com.opengamma.strata.product.credit.IndexReferenceInformation; import com.opengamma.strata.product.credit.RestructuringClause; import com.opengamma.strata.product.credit.SeniorityLevel; import com.opengamma.strata.product.credit.SingleNameReferenceInformation; /** * Test {@link CdsConvention}. */ @Test public class CdsConventionTest { private static final ReferenceData REF_DATA = ReferenceData.standard(); //------------------------------------------------------------------------- public void test_of() { CdsConvention sut = CdsConventions.USD_NORTH_AMERICAN; assertEquals(sut, CdsConvention.of("USD-NorthAmerican")); assertEquals(sut.getName(), "USD-NorthAmerican"); assertEquals(sut.getCurrency(), USD); assertEquals(sut.getDayCount(), ACT_360); assertEquals(sut.getBusinessDayAdjustment(), BusinessDayAdjustment.of(FOLLOWING, USNY)); assertEquals(sut.getPaymentFrequency(), P3M); assertEquals(sut.getRollConvention(), DAY_20); assertEquals(sut.isPayAccruedOnDefault(), true); assertEquals(sut.getStubConvention(), SHORT_INITIAL); assertEquals(sut.getStepInDays(), 1); assertEquals(sut.getSettleLagDays(), 3); } //------------------------------------------------------------------------- public void test_unadjusted_maturity_date_from_valuation_date() { CdsConvention sut = CdsConventions.USD_NORTH_AMERICAN; assertEquals(sut.calculateUnadjustedMaturityDateFromValuationDate(date(2014, 9, 19), Period.ofYears(5)), date(2019, 9, 20)); assertEquals(sut.calculateUnadjustedMaturityDateFromValuationDate(date(2014, 9, 20), Period.ofYears(5)), date(2019, 9, 20)); assertEquals(sut.calculateUnadjustedMaturityDateFromValuationDate(date(2014, 9, 21), Period.ofYears(5)), date(2019, 12, 20)); assertEquals(sut.calculateUnadjustedMaturityDateFromValuationDate(date(2014, 10, 16), Period.ofYears(5)), date(2019, 12, 20)); assertEquals(sut.calculateUnadjustedMaturityDateFromValuationDate(date(2015, 10, 16), Period.ofYears(5)), date(2020, 12, 20)); } public void test_unadjusted_maturity_date() { assertEquals(CdsConvention.calculateUnadjustedMaturityDate(date(2014, 9, 19), P3M, Period.ofYears(5)), date(2019, 9, 20)); assertEquals(CdsConvention.calculateUnadjustedMaturityDate(date(2014, 9, 20), P3M, Period.ofYears(5)), date(2019, 9, 20)); assertEquals(CdsConvention.calculateUnadjustedMaturityDate(date(2014, 9, 21), P3M, Period.ofYears(5)), date(2019, 12, 20)); assertEquals(CdsConvention.calculateUnadjustedMaturityDate(date(2014, 10, 16), P3M, Period.ofYears(5)), date(2019, 12, 20)); } public void test_unadjusted_start_date() { assertEquals(CdsConvention.calculateUnadjustedAccrualStartDate(date(2014, 9, 19)), date(2014, 6, 20)); assertEquals(CdsConvention.calculateUnadjustedAccrualStartDate(date(2014, 9, 20)), date(2014, 6, 20)); assertEquals(CdsConvention.calculateUnadjustedAccrualStartDate(date(2014, 9, 21)), date(2014, 9, 20)); assertEquals(CdsConvention.calculateUnadjustedAccrualStartDate(date(2014, 10, 16)), date(2014, 9, 20)); } public void test_adjusted_start_date() { CdsConvention sut = CdsConventions.USD_NORTH_AMERICAN; assertEquals(sut.calculateAdjustedStartDate(date(2014, 9, 19), REF_DATA), date(2014, 6, 20)); assertEquals(sut.calculateAdjustedStartDate(date(2014, 9, 20), REF_DATA), date(2014, 6, 20)); assertEquals(sut.calculateAdjustedStartDate(date(2014, 9, 21), REF_DATA), date(2014, 9, 22)); assertEquals(sut.calculateAdjustedStartDate(date(2014, 10, 16), REF_DATA), date(2014, 9, 22)); } public void test_adjusted_settle_date() { CdsConvention sut = CdsConventions.USD_NORTH_AMERICAN; assertEquals(sut.calculateAdjustedSettleDate(date(2014, 9, 19), REF_DATA), date(2014, 9, 24)); assertEquals(sut.calculateAdjustedSettleDate(date(2014, 9, 20), REF_DATA), date(2014, 9, 24)); assertEquals(sut.calculateAdjustedSettleDate(date(2014, 9, 21), REF_DATA), date(2014, 9, 24)); assertEquals(sut.calculateAdjustedSettleDate(date(2014, 9, 22), REF_DATA), date(2014, 9, 25)); assertEquals(sut.calculateAdjustedSettleDate(date(2014, 10, 16), REF_DATA), date(2014, 10, 21)); } public void test_unadjusted_step_in_date() { CdsConvention sut = CdsConventions.USD_NORTH_AMERICAN; assertEquals(sut.calculateUnadjustedStepInDate(date(2014, 9, 19)), date(2014, 9, 20)); assertEquals(sut.calculateUnadjustedStepInDate(date(2014, 9, 20)), date(2014, 9, 21)); assertEquals(sut.calculateUnadjustedStepInDate(date(2014, 9, 21)), date(2014, 9, 22)); assertEquals(sut.calculateUnadjustedStepInDate(date(2014, 10, 16)), date(2014, 10, 17)); } //------------------------------------------------------------------------- public void test_toTrade_singleName() { CdsConvention sut = CdsConventions.USD_NORTH_AMERICAN; assertEquals( sut.toTrade( date(2014, 3, 20), date(2019, 6, 20), BUY, 100_000_000d, 0.00100, SingleNameReferenceInformation.of( StandardId.of("Test", "Test1"), SeniorityLevel.SENIOR_UNSECURED_FOREIGN, USD, RestructuringClause.NO_RESTRUCTURING_2014), 1_000_000d, date(2014, 3, 23)), CdsTestUtils.singleNameTrade()); } public void test_toTrade_index() { CdsConvention sut = CdsConventions.USD_NORTH_AMERICAN; assertEquals( sut.toTrade( date(2014, 3, 20), date(2019, 6, 20), BUY, 100_000_000d, 0.00100, IndexReferenceInformation.of(StandardId.of("Test", "Test1"), 32, 8), 1_000_000d, date(2014, 3, 23)), CdsTestUtils.indexTrade()); } }