//-------------------------------------------------------------------------
        public virtual void test_presentValueSensitivityRates()
        {
            ImpliedTrinomialTreeFxSingleBarrierOptionProductPricer pricer = new ImpliedTrinomialTreeFxSingleBarrierOptionProductPricer(21);
            CurrencyParameterSensitivities             computed           = pricer.presentValueSensitivityRates(CALL_UKI_C, RATE_PROVIDER, VOLS);
            RatesFiniteDifferenceSensitivityCalculator calc     = new RatesFiniteDifferenceSensitivityCalculator(1.0e-5);
            CurrencyParameterSensitivities             expected = calc.sensitivity(RATE_PROVIDER, p => pricer.presentValue(CALL_UKI_C, p, VOLS));

            assertTrue(computed.equalWithTolerance(expected, 1.0e-13));
        }
        //-------------------------------------------------------------------------
        public virtual void test_withData()
        {
            ImpliedTrinomialTreeFxSingleBarrierOptionProductPricer pricer = new ImpliedTrinomialTreeFxSingleBarrierOptionProductPricer(5);
            RecombiningTrinomialTreeData data = pricer.Calibrator.calibrateTrinomialTree(CALL_DKO.UnderlyingOption, RATE_PROVIDER, VOLS);
            double price         = pricer.price(CALL_UKI_C, RATE_PROVIDER, VOLS);
            double priceWithData = pricer.price(CALL_UKI_C, RATE_PROVIDER, VOLS, data);

            assertEquals(price, priceWithData);
            CurrencyAmount pv         = pricer.presentValue(CALL_DKO, RATE_PROVIDER, VOLS);
            CurrencyAmount pvWithData = pricer.presentValue(CALL_DKO, RATE_PROVIDER, VOLS, data);

            assertEquals(pv, pvWithData);
            MultiCurrencyAmount ce         = pricer.currencyExposure(CALL_UKI_C, RATE_PROVIDER, VOLS);
            MultiCurrencyAmount ceWithData = pricer.currencyExposure(CALL_UKI_C, RATE_PROVIDER, VOLS, data);

            assertEquals(ce, ceWithData);
        }
 /// <summary>
 /// Creates an instance.
 /// </summary>
 /// <param name="productPricer">  the pricer for <seealso cref="ResolvedFxSingleBarrierOption"/> </param>
 /// <param name="paymentPricer">  the pricer for <seealso cref="Payment"/> </param>
 public ImpliedTrinomialTreeFxSingleBarrierOptionTradePricer(ImpliedTrinomialTreeFxSingleBarrierOptionProductPricer productPricer, DiscountingPaymentPricer paymentPricer)
 {
     this.productPricer = ArgChecker.notNull(productPricer, "productPricer");
     this.paymentPricer = ArgChecker.notNull(paymentPricer, "paymentPricer");
 }