public virtual void test_zeroRatePointSensitivity_sensitivityCurrency()
        {
            ZeroRatePeriodicDiscountFactors test = ZeroRatePeriodicDiscountFactors.of(GBP, DATE_VAL, CURVE);
            double relativeYearFraction          = ACT_365F.relativeYearFraction(DATE_VAL, DATE_AFTER);
            double df = test.discountFactor(DATE_AFTER);
            ZeroRateSensitivity expected = ZeroRateSensitivity.of(GBP, relativeYearFraction, USD, -df * relativeYearFraction);

            assertEquals(test.zeroRatePointSensitivity(DATE_AFTER, USD), expected);
        }
        //-------------------------------------------------------------------------
        //-------------------------------------------------------------------------
        public virtual void test_parameterSensitivity()
        {
            ZeroRatePeriodicDiscountFactors test = ZeroRatePeriodicDiscountFactors.of(GBP, DATE_VAL, CURVE);
            double sensiValue         = 25d;
            ZeroRateSensitivity point = test.zeroRatePointSensitivity(DATE_AFTER);

            point = point.multipliedBy(sensiValue);
            CurrencyParameterSensitivities sensiObject = test.parameterSensitivity(point);

            assertEquals(sensiObject.size(), 1);
            CurrencyParameterSensitivity sensi1 = sensiObject.Sensitivities.get(0);

            assertEquals(sensi1.Currency, GBP);
        }
        //-------------------------------------------------------------------------
        public virtual void test_parameterSensitivity_full()
        {
            ZeroRatePeriodicDiscountFactors test = ZeroRatePeriodicDiscountFactors.of(GBP, DATE_VAL, CURVE);
            double sensiValue         = 25d;
            ZeroRateSensitivity point = test.zeroRatePointSensitivity(DATE_AFTER);

            point = point.multipliedBy(sensiValue);
            CurrencyParameterSensitivities sensiObject = test.parameterSensitivity(point);

            assertEquals(sensiObject.Sensitivities.size(), 1);
            DoubleArray sensi0 = sensiObject.Sensitivities.get(0).Sensitivity;
            double      shift  = 1.0E-6;

            for (int i = 0; i < X.size(); i++)
            {
                DoubleArray            yP     = Y.with(i, Y.get(i) + shift);
                InterpolatedNodalCurve curveP = InterpolatedNodalCurve.of(META_ZERO_PERIODIC, X, yP, INTERPOLATOR);
                double                 dfP    = ZeroRatePeriodicDiscountFactors.of(GBP, DATE_VAL, curveP).discountFactor(DATE_AFTER);
                DoubleArray            yM     = Y.with(i, Y.get(i) - shift);
                InterpolatedNodalCurve curveM = InterpolatedNodalCurve.of(META_ZERO_PERIODIC, X, yM, INTERPOLATOR);
                double                 dfM    = ZeroRatePeriodicDiscountFactors.of(GBP, DATE_VAL, curveM).discountFactor(DATE_AFTER);
                assertEquals(sensi0.get(i), sensiValue * (dfP - dfM) / (2 * shift), TOLERANCE_DELTA_FD);
            }
        }