public virtual void test_recovery01OnSettle()
        {
            CurrencyAmount computed   = PRICER.recovery01OnSettle(TRADE, RATES_PROVIDER, REF_DATA);
            CurrencyAmount expected   = PRICER_PRODUCT.recovery01(PRODUCT, RATES_PROVIDER, SETTLEMENT_DATE, REF_DATA);
            CurrencyAmount computedMf = PRICER_MF.recovery01OnSettle(TRADE_NO_SETTLE_DATE, RATES_PROVIDER, REF_DATA);
            CurrencyAmount expectedMf = PRICER_PRODUCT_MF.recovery01(PRODUCT, RATES_PROVIDER, SETTLEMENT_DATE, REF_DATA);

            assertEquals(computed.Amount, expected.Amount, TOL);
            assertEquals(computedMf.Amount, expectedMf.Amount, TOL);
        }
        //-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the recovery01 of the underlying product.
        /// <para>
        /// The recovery01 is defined as the present value sensitivity to the recovery rate.
        /// Since the ISDA standard model requires the recovery rate to be constant throughout the lifetime of the CDS,
        /// one currency amount is returned by this method.
        /// </para>
        /// <para>
        /// This is computed based on the settlement date rather than the valuation date.
        ///
        /// </para>
        /// </summary>
        /// <param name="trade">  the trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <param name="refData">  the reference data </param>
        /// <returns> the recovery01 </returns>
        public virtual CurrencyAmount recovery01OnSettle(ResolvedCdsTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
        {
            LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData);

            return(productPricer.recovery01(trade.Product, ratesProvider, settlementDate, refData));
        }