//-------------------------------------------------------------------------
        public virtual void coverage()
        {
            NormalIborFutureOptionExpirySimpleMoneynessVolatilities test = NormalIborFutureOptionExpirySimpleMoneynessVolatilities.of(EUR_EURIBOR_3M, VAL_DATE_TIME, PARAMETERS_RATE);

            coverImmutableBean(test);
            NormalIborFutureOptionExpirySimpleMoneynessVolatilities test2 = NormalIborFutureOptionExpirySimpleMoneynessVolatilities.of(EUR_EURIBOR_6M, VAL_DATE_TIME.plusDays(1), PARAMETERS_PRICE);

            coverBeanEquals(test, test2);
        }
 public override bool Equals(object obj)
 {
     if (obj == this)
     {
         return(true);
     }
     if (obj != null && obj.GetType() == this.GetType())
     {
         NormalIborFutureOptionExpirySimpleMoneynessVolatilities other = (NormalIborFutureOptionExpirySimpleMoneynessVolatilities)obj;
         return(JodaBeanUtils.equal(index, other.index) && JodaBeanUtils.equal(valuationDateTime, other.valuationDateTime) && JodaBeanUtils.equal(surface, other.surface));
     }
     return(false);
 }
        //-------------------------------------------------------------------------
        public virtual void test_parameterSensitivity()
        {
            double    expiry      = ACT_365F.relativeYearFraction(VAL_DATE, LocalDate.of(2015, 8, 14));
            LocalDate fixing      = LocalDate.of(2016, 9, 14);
            double    strikePrice = 1.0025;
            double    futurePrice = 0.9975;
            double    sensitivity = 123456;
            IborFutureOptionSensitivity    point = IborFutureOptionSensitivity.of(VOL_SIMPLE_MONEY_RATE.Name, expiry, fixing, strikePrice, futurePrice, EUR, sensitivity);
            CurrencyParameterSensitivities ps    = VOL_SIMPLE_MONEY_RATE.parameterSensitivity(point);
            double shift = 1.0E-6;
            double v0    = VOL_SIMPLE_MONEY_RATE.volatility(expiry, fixing, strikePrice, futurePrice);

            for (int i = 0; i < NORMAL_VOL_RATES.size(); i++)
            {
                DoubleArray v = NORMAL_VOL_RATES.with(i, NORMAL_VOL_RATES.get(i) + shift);
                InterpolatedNodalSurface param = InterpolatedNodalSurface.of(Surfaces.normalVolatilityByExpirySimpleMoneyness("Rate", ACT_365F, MoneynessType.RATES), TIMES, MONEYNESS_RATES, v, INTERPOLATOR_2D);
                NormalIborFutureOptionExpirySimpleMoneynessVolatilities vol = NormalIborFutureOptionExpirySimpleMoneynessVolatilities.of(EUR_EURIBOR_3M, VAL_DATE_TIME, param);
                double vP = vol.volatility(expiry, fixing, strikePrice, futurePrice);
                double s  = ps.getSensitivity(PARAMETERS_RATE.Name, EUR).Sensitivity.get(i);
                assertEquals(s, (vP - v0) / shift * sensitivity, TOLERANCE_DELTA);
            }
        }