/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.sesame.marketdata.scenarios;
import static org.testng.AssertJUnit.assertEquals;
import java.util.Map;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableSortedMap;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.financial.analytics.isda.credit.CdsQuote;
import com.opengamma.financial.analytics.isda.credit.CreditCurveData;
import com.opengamma.financial.analytics.isda.credit.ParSpreadQuote;
import com.opengamma.sesame.credit.CreditPricingSampleData;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.time.Tenor;
/**
* Test credit curve parallel shifts
*/
@Test(groups = TestGroup.UNIT)
public class CreditCurveParallelShiftTest {
@Test
public void absolute() {
double shiftAmount = 0.0001;
CreditCurveParallelShift absolute = CreditCurveParallelShift.absolute(shiftAmount);
CreditCurveData shifted = absolute.apply(CreditPricingSampleData.createSingleNameCreditCurveData(),
StandardMatchDetails.MATCH);
ImmutableSortedMap<Tenor, CdsQuote> cdsQuotes = shifted.getCdsQuotes();
for (Map.Entry<Tenor, CdsQuote> entry : cdsQuotes.entrySet()) {
ParSpreadQuote quote = (ParSpreadQuote) entry.getValue();
assertEquals(0.0029, quote.getParSpread());
}
}
@Test
public void relative() {
double shiftAmount = 0.01; //shift 1%
CreditCurveParallelShift relative = CreditCurveParallelShift.relative(shiftAmount);
CreditCurveData shifted = relative.apply(CreditPricingSampleData.createSingleNameCreditCurveData(),
StandardMatchDetails.MATCH);
ImmutableSortedMap<Tenor, CdsQuote> cdsQuotes = shifted.getCdsQuotes();
for (Map.Entry<Tenor, CdsQuote> entry : cdsQuotes.entrySet()) {
ParSpreadQuote quote = (ParSpreadQuote) entry.getValue();
assertEquals(0.002828, quote.getParSpread());
}
}
@Test
public void flooredShift() {
double shiftAmount = -0.0030;
CreditCurveParallelShift relative = CreditCurveParallelShift.absolute(shiftAmount);
CreditCurveData shifted = relative.apply(CreditPricingSampleData.createSingleNameCreditCurveData(),
StandardMatchDetails.MATCH);
ImmutableSortedMap<Tenor, CdsQuote> cdsQuotes = shifted.getCdsQuotes();
for (Map.Entry<Tenor, CdsQuote> entry : cdsQuotes.entrySet()) {
ParSpreadQuote quote = (ParSpreadQuote) entry.getValue();
assertEquals(0d, quote.getParSpread());
}
}
@Test(expectedExceptions = OpenGammaRuntimeException.class)
public void pointsUpFrontQuote() {
CreditCurveParallelShift relative = CreditCurveParallelShift.relative(0.01);
relative.apply(CreditPricingSampleData.createPUFSingleNameCreditCurveData(), StandardMatchDetails.MATCH);
}
}