public virtual void test_of()
        {
            SabrParametersIborCapletFloorletVolatilities test = SabrParametersIborCapletFloorletVolatilities.of(NAME, EUR_EURIBOR_3M, DATE_TIME, PARAM);

            assertEquals(test.Index, EUR_EURIBOR_3M);
            assertEquals(test.DayCount, ACT_ACT_ISDA);
            assertEquals(test.Parameters, PARAM);
            assertEquals(test.ValuationDateTime, DATE_TIME);
            assertEquals(test.ParameterCount, PARAM.ParameterCount);
            int    nParams  = PARAM.ParameterCount;
            double newValue = 152d;

            for (int i = 0; i < nParams; ++i)
            {
                assertEquals(test.getParameter(i), PARAM.getParameter(i));
                assertEquals(test.getParameterMetadata(i), PARAM.getParameterMetadata(i));
                assertEquals(test.withParameter(i, newValue), SabrParametersIborCapletFloorletVolatilities.of(NAME, EUR_EURIBOR_3M, DATE_TIME, PARAM.withParameter(i, newValue)));
                assertEquals(test.withPerturbation((n, v, m) => 2d * v), SabrParametersIborCapletFloorletVolatilities.of(NAME, EUR_EURIBOR_3M, DATE_TIME, PARAM.withPerturbation((n, v, m) => 2d * v)));
            }
        }