/**
* 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 org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import org.threeten.bp.Period;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class MultiCDSAnalyticTest extends ISDABaseTest {
@Test
public void test() {
final CDSAnalyticFactory factory = new CDSAnalyticFactory();
final LocalDate tradeDate = LocalDate.of(2013, 12, 19);
MultiCDSAnalytic multiCDS = factory.makeMultiIMMCDS(tradeDate, new int[] {0, 1, 2, 4 });
CDSAnalytic[] cds = factory.makeIMMCDS(tradeDate, new Period[] {Period.ZERO, Period.ofMonths(3), Period.ofMonths(6), Period.ofMonths(12) });
for (int i = 0; i < 4; i++) {
assertEquals(cds[i].getAccuredDays(), multiCDS.getAccuredDays(i));
assertEquals(cds[i].getAccruedYearFraction(), multiCDS.getAccruedPremiumPerUnitSpread(i), 1e-16);
assertEquals(cds[i].getEffectiveProtectionStart(), multiCDS.getEffectiveProtectionStart(), 1e-16);
assertEquals(cds[i].getAccStart(), multiCDS.getAccStart(), 1e-16);
}
multiCDS = factory.makeMultiIMMCDS(tradeDate, new int[] {2, 4, 12, 20, 28, 40 });
cds = factory.makeIMMCDS(tradeDate, new Period[] {Period.ofMonths(6), Period.ofYears(1), Period.ofYears(3), Period.ofYears(5), Period.ofYears(7), Period.ofYears(10) });
for (int i = 0; i < 6; i++) {
assertEquals(cds[i].getAccuredDays(), multiCDS.getAccuredDays(i));
assertEquals(cds[i].getAccruedYearFraction(), multiCDS.getAccruedPremiumPerUnitSpread(i), 1e-16);
assertEquals(cds[i].getEffectiveProtectionStart(), multiCDS.getEffectiveProtectionStart(), 1e-16);
assertEquals(cds[i].getAccStart(), multiCDS.getAccStart(), 1e-16);
}
}
@Test
public void forwardStartTest() {
final CDSAnalyticFactory factory = new CDSAnalyticFactory();
final LocalDate tradeDate = LocalDate.of(2012, 7, 30);
final LocalDate accStart = LocalDate.of(2013, 6, 20);
final MultiCDSAnalytic multiCDS = factory.makeMultiIMMCDS(tradeDate, accStart, new int[] {4, 5, 6, 8 });
final CDSAnalytic[] cds = factory.makeIMMCDS(tradeDate, accStart, new Period[] {Period.ofMonths(12), Period.ofMonths(15), Period.ofMonths(18), Period.ofMonths(24) });
for (int i = 0; i < 4; i++) {
assertEquals(cds[i].getAccuredDays(), multiCDS.getAccuredDays(i));
assertEquals(cds[i].getAccruedYearFraction(), multiCDS.getAccruedPremiumPerUnitSpread(i), 1e-16);
assertEquals(cds[i].getEffectiveProtectionStart(), multiCDS.getEffectiveProtectionStart(), 1e-16);
assertEquals(cds[i].getAccStart(), multiCDS.getAccStart(), 1e-16);
}
}
}