CreditCurveParallelShift implements Perturbation, ImmutableBean { public static CreditCurveParallelShift relative(double shiftAmount) { return new CreditCurveParallelShift(ShiftType.RELATIVE, shiftAmount); } private  CreditCurveParallelShift(
      ShiftType shiftType,
      double shiftAmount); static CreditCurveParallelShift absolute(double shiftAmount); static CreditCurveParallelShift relative(double shiftAmount); @Override CreditCurveData apply(Object marketData, MatchDetails matchDetails); @Override Class<?> getMarketDataType(); @Override Class<? extends MatchDetails> getMatchDetailsType(); @Override PerturbationTarget getTargetType(); static CreditCurveParallelShift.Meta meta(); static CreditCurveParallelShift.Builder builder(); @Override CreditCurveParallelShift.Meta metaBean(); @Override Property<R> property(String propertyName); @Override Set<String> propertyNames(); Builder toBuilder(); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString();  }
@Test public void relative() { double shiftAmount = 0.01; 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()); } }