//-------------------------------------------------------------------------
        public virtual void present_value_theta_formula()
        {
            double                forward         = PRICER_SWAP.parRate(RSWAP_REC, MULTI_USD);
            double                pvbp            = PRICER_SWAP.LegPricer.pvbp(RSWAP_REC.getLegs(SwapLegType.FIXED).get(0), MULTI_USD);
            double                volatility      = NORMAL_VOLS_USD_STD.volatility(SWAPTION_LONG_REC.Expiry, SWAP_TENOR_YEAR, STRIKE, forward);
            NormalFunctionData    normalData      = NormalFunctionData.of(forward, Math.Abs(pvbp), volatility);
            double                expiry          = NORMAL_VOLS_USD_STD.relativeTime(SWAPTION_LONG_REC.Expiry);
            EuropeanVanillaOption option          = EuropeanVanillaOption.of(STRIKE, expiry, PutCall.PUT);
            double                pvThetaExpected = NORMAL.getTheta(option, normalData);
            CurrencyAmount        pvThetaComputed = PRICER_SWAPTION_NORMAL.presentValueTheta(SWAPTION_LONG_REC, MULTI_USD, NORMAL_VOLS_USD_STD);

            assertEquals(pvThetaComputed.Currency, USD);
            assertEquals(pvThetaComputed.Amount, pvThetaExpected, TOLERANCE_PV);
        }
        //-------------------------------------------------------------------------
        public virtual void test_presentValueTheta()
        {
            CurrencyAmount        pvThetaRecComputed = PRICER_SWAPTION.presentValueTheta(SWAPTION_REC_LONG, RATE_PROVIDER, VOLS);
            CurrencyAmount        pvThetaPayComputed = PRICER_SWAPTION.presentValueTheta(SWAPTION_PAY_SHORT, RATE_PROVIDER, VOLS);
            double                forward            = PRICER_SWAP.parRate(RSWAP_REC, RATE_PROVIDER);
            double                annuityCash        = PRICER_SWAP.LegPricer.annuityCash(RSWAP_REC.getLegs(SwapLegType.FIXED).get(0), forward);
            double                volatility         = VOLS.volatility(SWAPTION_REC_LONG.Expiry, SWAP_TENOR_YEAR, STRIKE, forward);
            double                discount           = RATE_PROVIDER.discountFactor(USD, SETTLE_DATE);
            NormalFunctionData    normalData         = NormalFunctionData.of(forward, annuityCash * discount, volatility);
            double                expiry             = VOLS.relativeTime(SWAPTION_REC_LONG.Expiry);
            EuropeanVanillaOption optionRec          = EuropeanVanillaOption.of(STRIKE, expiry, PutCall.PUT);
            EuropeanVanillaOption optionPay          = EuropeanVanillaOption.of(STRIKE, expiry, PutCall.CALL);
            double                pvThetaRecExpected = NORMAL.getTheta(optionRec, normalData);
            double                pvThetaPayExpected = -NORMAL.getTheta(optionPay, normalData);

            assertEquals(pvThetaRecComputed.Currency, USD);
            assertEquals(pvThetaRecComputed.Amount, pvThetaRecExpected, NOTIONAL * TOL);
            assertEquals(pvThetaPayComputed.Currency, USD);
            assertEquals(pvThetaPayComputed.Amount, pvThetaPayExpected, NOTIONAL * TOL);
        }