/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.credit.isdastandardmodel; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertTrue; import org.testng.annotations.Test; import org.threeten.bp.LocalDate; import org.threeten.bp.Month; import org.threeten.bp.Period; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class CDSAnalyticTest extends ISDABaseTest { private static CDSAnalyticFactory FACTORY = new CDSAnalyticFactory(); @Test public void accruedInterestTest() { final LocalDate accStart = LocalDate.of(2011, Month.MARCH, 21); final LocalDate maturity = LocalDate.of(2011, Month.SEPTEMBER, 20); LocalDate tradeDate = LocalDate.of(2011, Month.JUNE, 18); CDSAnalytic cds = FACTORY.makeCDS(tradeDate, accStart, maturity); assertEquals(90, cds.getAccuredDays()); tradeDate = LocalDate.of(2011, Month.JUNE, 19); cds = FACTORY.makeCDS(tradeDate, accStart, maturity); assertEquals(0, cds.getAccuredDays()); tradeDate = LocalDate.of(2011, Month.JUNE, 20); cds = FACTORY.makeCDS(tradeDate, accStart, maturity); assertEquals(1, cds.getAccuredDays()); } @Test public void accruedInterestTest2() { final LocalDate accStart = LocalDate.of(2011, Month.MARCH, 21); final LocalDate maturity = LocalDate.of(2011, Month.JUNE, 20); LocalDate tradeDate = LocalDate.of(2011, Month.JUNE, 18); CDSAnalytic cds = FACTORY.makeCDS(tradeDate, accStart, maturity); assertEquals(90, cds.getAccuredDays()); tradeDate = LocalDate.of(2011, Month.JUNE, 19); cds = FACTORY.makeCDS(tradeDate, accStart, maturity); assertEquals(91, cds.getAccuredDays()); //NOTE: this is the result from calling the ISDA c code (via Excel). The Markit calculator //shows 0 accrued days for this - this is probably an override before the model is hit. } @Test public void equalsTest() { final LocalDate tradeDate = LocalDate.of(2014, 2, 26); final Period term = Period.ofYears(5); final CDSAnalytic cds1 = FACTORY.makeIMMCDS(tradeDate, term); final CDSAnalytic cds2 = FACTORY.makeIMMCDS(tradeDate, term); assertEquals(cds1, cds2); final CDSAnalytic cds3 = FACTORY.withRecoveryRate(0.3).makeIMMCDS(tradeDate, term); assertFalse(cds1.equals(cds3)); final CDSAnalytic cds4 = cds3.withRecoveryRate(0.4); assertTrue(cds1.equals(cds4)); } @Test public void offsetTest() { final LocalDate tradeDate = LocalDate.of(2014, 2, 26); final LocalDate expiry = LocalDate.of(2014, 3, 12); final Period term = Period.ofYears(5); final CDSAnalytic fwdCDS = FACTORY.makeIMMCDS(expiry, term); final CDSAnalytic fwdStartingCDS = FACTORY.makeForwardStartingIMMCDS(tradeDate, expiry, term); final double tE = ACT365F.getDayCountFraction(tradeDate, expiry); final CDSAnalytic fwdStartingCDS2 = fwdCDS.withOffset(tE); assertEquals(fwdStartingCDS.getAccruedYearFraction(), fwdStartingCDS2.getAccruedYearFraction()); assertEquals(fwdStartingCDS.getLGD(), fwdStartingCDS2.getLGD()); assertEquals(fwdStartingCDS.getNumPayments(), fwdStartingCDS2.getNumPayments()); assertEquals(fwdStartingCDS.getAccStart(), fwdStartingCDS2.getAccStart(), 1e-15); assertEquals(fwdStartingCDS.getEffectiveProtectionStart(), fwdStartingCDS2.getEffectiveProtectionStart(), 1e-15); assertEquals(fwdStartingCDS.getCashSettleTime(), fwdStartingCDS2.getCashSettleTime(), 1e-15); assertEquals(fwdStartingCDS.getProtectionEnd(), fwdStartingCDS2.getProtectionEnd(), 1e-15); for (int i = 0; i < fwdStartingCDS.getNumPayments(); i++) { final CDSCoupon c1 = fwdStartingCDS.getCoupon(i); final CDSCoupon c2 = fwdStartingCDS2.getCoupon(i); assertEquals(c1.getEffStart(), c2.getEffStart(), 1e-15); assertEquals(c1.getEffEnd(), c2.getEffEnd(), 1e-15); assertEquals(c1.getPaymentTime(), c2.getPaymentTime(), 1e-15); assertEquals(c1.getYearFrac(), c2.getYearFrac()); assertEquals(c1.getYFRatio(), c2.getYFRatio()); } } }