### Question:
FxRateShifts implements ScenarioPerturbation<FxRate>, ImmutableBean, Serializable { public static FxRateShifts of(ShiftType shiftType, DoubleArray shiftAmount, CurrencyPair currencyPair) { return new FxRateShifts(shiftType, shiftAmount, currencyPair); } FxRateShifts(
      ShiftType shiftType,
      DoubleArray shiftAmount,
      CurrencyPair currencyPair); static FxRateShifts of(ShiftType shiftType, DoubleArray shiftAmount, CurrencyPair currencyPair); @Override MarketDataBox<FxRate> applyTo(MarketDataBox<FxRate> marketData, ReferenceData refData); @Override int getScenarioCount(); @Override Class<FxRate> getMarketDataType(); static FxRateShifts.Meta meta(); @Override FxRateShifts.Meta metaBean(); ShiftType getShiftType(); DoubleArray getShiftAmount(); CurrencyPair getCurrencyPair(); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void coverage() { FxRateShifts test1 = FxRateShifts.of(ShiftType.SCALED, SHIFT_AMOUNT_2, EURUSD); coverImmutableBean(test1); FxRateShifts test2 = FxRateShifts.of(ShiftType.ABSOLUTE, SHIFT_AMOUNT_1, USDEUR); coverBeanEquals(test1, test2); }