### Question:
BlackFxOptionSurfaceVolatilities implements BlackFxOptionVolatilities, ImmutableBean, Serializable { public static BlackFxOptionSurfaceVolatilities of( CurrencyPair currencyPair, ZonedDateTime valuationDateTime, Surface surface) { FxOptionVolatilitiesName name = FxOptionVolatilitiesName.of(surface.getName().getName()); return of(name, currencyPair, valuationDateTime, surface); } @ImmutableConstructor private  BlackFxOptionSurfaceVolatilities(
      FxOptionVolatilitiesName name,
      CurrencyPair currencyPair,
      ZonedDateTime valuationDateTime,
      Surface surface); static BlackFxOptionSurfaceVolatilities of(
      CurrencyPair currencyPair,
      ZonedDateTime valuationDateTime,
      Surface surface); static BlackFxOptionSurfaceVolatilities of(
      FxOptionVolatilitiesName name,
      CurrencyPair currencyPair,
      ZonedDateTime valuationDateTime,
      Surface surface); @Override Optional<T> findData(MarketDataName<T> name); @Override int getParameterCount(); @Override double getParameter(int parameterIndex); @Override ParameterMetadata getParameterMetadata(int parameterIndex); @Override OptionalInt findParameterIndex(ParameterMetadata metadata); @Override BlackFxOptionSurfaceVolatilities withParameter(int parameterIndex, double newValue); @Override BlackFxOptionSurfaceVolatilities withPerturbation(ParameterPerturbation perturbation); @Override double volatility(CurrencyPair currencyPair, double expiry, double strike, double forward); @Override CurrencyParameterSensitivities parameterSensitivity(PointSensitivities pointSensitivities); @Override double price(double expiry, PutCall putCall, double strike, double forward, double volatility); @Override double relativeTime(ZonedDateTime dateTime); static BlackFxOptionSurfaceVolatilities.Meta meta(); static BlackFxOptionSurfaceVolatilities.Builder builder(); @Override BlackFxOptionSurfaceVolatilities.Meta metaBean(); @Override FxOptionVolatilitiesName getName(); @Override CurrencyPair getCurrencyPair(); @Override ZonedDateTime getValuationDateTime(); Surface getSurface(); Builder toBuilder(); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void coverage() { BlackFxOptionSurfaceVolatilities test1 = BlackFxOptionSurfaceVolatilities.of(CURRENCY_PAIR, VAL_DATE_TIME, SURFACE); coverImmutableBean(test1); BlackFxOptionSurfaceVolatilities test2 = BlackFxOptionSurfaceVolatilities.of( CURRENCY_PAIR.inverse(), ZonedDateTime.of(2015, 12, 21, 11, 15, 0, 0, ZoneId.of("Z")), SURFACE); coverBeanEquals(test1, test2); }