### Question:
DirectIborCapletFloorletVolatilityDefinition implements IborCapletFloorletVolatilityDefinition, ImmutableBean, Serializable { public static DirectIborCapletFloorletVolatilityDefinition of( IborCapletFloorletVolatilitiesName name, IborIndex index, DayCount dayCount, double lambdaExpiry, double lambdaStrike, GridSurfaceInterpolator interpolator) { return new DirectIborCapletFloorletVolatilityDefinition( name, index, dayCount, lambdaExpiry, lambdaStrike, interpolator, null); } private  DirectIborCapletFloorletVolatilityDefinition(
      IborCapletFloorletVolatilitiesName name,
      IborIndex index,
      DayCount dayCount,
      double lambdaExpiry,
      double lambdaStrike,
      GridSurfaceInterpolator interpolator,
      Curve shiftCurve); static DirectIborCapletFloorletVolatilityDefinition of(
      IborCapletFloorletVolatilitiesName name,
      IborIndex index,
      DayCount dayCount,
      double lambdaExpiry,
      double lambdaStrike,
      GridSurfaceInterpolator interpolator); static DirectIborCapletFloorletVolatilityDefinition of(
      IborCapletFloorletVolatilitiesName name,
      IborIndex index,
      DayCount dayCount,
      double lambdaExpiry,
      double lambdaStrike,
      GridSurfaceInterpolator interpolator,
      Curve shiftCurve); @Override SurfaceMetadata createMetadata(RawOptionData capFloorData); DoubleMatrix computePenaltyMatrix(DoubleArray strikes, DoubleArray expiries); static DirectIborCapletFloorletVolatilityDefinition.Meta meta(); static DirectIborCapletFloorletVolatilityDefinition.Builder builder(); @Override DirectIborCapletFloorletVolatilityDefinition.Meta metaBean(); @Override IborCapletFloorletVolatilitiesName getName(); @Override IborIndex getIndex(); @Override DayCount getDayCount(); double getLambdaExpiry(); double getLambdaStrike(); GridSurfaceInterpolator getInterpolator(); Optional<Curve> getShiftCurve(); Builder toBuilder(); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void coverage() { DirectIborCapletFloorletVolatilityDefinition test1 = DirectIborCapletFloorletVolatilityDefinition.of( NAME, USD_LIBOR_3M, ACT_ACT_ISDA, LAMBDA_EXPIRY, LAMBDA_STRIKE, INTERPOLATOR, SHIFT_CURVE); coverImmutableBean(test1); DirectIborCapletFloorletVolatilityDefinition test2 = DirectIborCapletFloorletVolatilityDefinition.of( IborCapletFloorletVolatilitiesName.of("other"), GBP_LIBOR_3M, ACT_365F, 0.01, 0.02, GridSurfaceInterpolator.of(CurveInterpolators.LINEAR, CurveInterpolators.LINEAR)); coverBeanEquals(test1, test2); }
@Test public void test_serialization() { DirectIborCapletFloorletVolatilityDefinition test = DirectIborCapletFloorletVolatilityDefinition.of( NAME, USD_LIBOR_3M, ACT_ACT_ISDA, LAMBDA_EXPIRY, LAMBDA_STRIKE, INTERPOLATOR, SHIFT_CURVE); assertSerialization(test); }