//-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the currency exposure of the FX vanilla option trade.
        /// </summary>
        /// <param name="trade">  the option trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <param name="volatilities">  the Black volatility provider </param>
        /// <returns> the currency exposure </returns>
        public virtual MultiCurrencyAmount currencyExposure(ResolvedFxVanillaOptionTrade trade, RatesProvider ratesProvider, BlackFxOptionVolatilities volatilities)
        {
            Payment                 premium   = trade.Premium;
            CurrencyAmount          pvPremium = paymentPricer.presentValue(premium, ratesProvider);
            ResolvedFxVanillaOption product   = trade.Product;

            return(productPricer.currencyExposure(product, ratesProvider, volatilities).plus(pvPremium));
        }
        //-------------------------------------------------------------------------
        public virtual void test_currencyExposure()
        {
            MultiCurrencyAmount computedPricer = PRICER.currencyExposure(CALL_OTM, RATES_PROVIDER, VOLS);
            CurrencyAmount      pv             = PRICER.presentValue(CALL_OTM, RATES_PROVIDER, VOLS);
            PointSensitivities  point          = PRICER.presentValueSensitivityRatesStickyStrike(CALL_OTM, RATES_PROVIDER, VOLS);
            MultiCurrencyAmount computedPoint  = RATES_PROVIDER.currencyExposure(point).plus(pv);

            assertEquals(computedPricer.getAmount(EUR).Amount, computedPoint.getAmount(EUR).Amount, NOTIONAL * TOL);
            assertEquals(computedPricer.getAmount(USD).Amount, computedPoint.getAmount(USD).Amount, NOTIONAL * TOL);
        }