public virtual void test_parSpreadSensitivity()
        {
            PointSensitivities computed   = PRICER.parSpreadSensitivity(TRADE, RATES_PROVIDER, REF_DATA);
            PointSensitivities expected   = PRICER_PRODUCT.parSpreadSensitivity(PRODUCT, RATES_PROVIDER, SETTLEMENT_DATE, REF_DATA).build();
            PointSensitivities computedMf = PRICER_MF.parSpreadSensitivity(TRADE_NO_SETTLE_DATE, RATES_PROVIDER, REF_DATA);
            PointSensitivities expectedMf = PRICER_PRODUCT_MF.parSpreadSensitivity(PRODUCT, RATES_PROVIDER, SETTLEMENT_DATE, REF_DATA).build();

            assertTrue(computed.equalWithTolerance(expected, TOL));
            assertTrue(computedMf.equalWithTolerance(expectedMf, TOL));
        }
        /// <summary>
        /// Calculates the par spread sensitivity of the product.
        /// <para>
        /// The par spread sensitivity of the product is the sensitivity of par spread to the underlying curves.
        /// The resulting sensitivity is based on the currency of the CDS index product.
        ///
        /// </para>
        /// </summary>
        /// <param name="cdsIndex">  the product </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <param name="referenceDate">  the reference date </param>
        /// <param name="refData">  the reference data </param>
        /// <returns> the par spread </returns>
        public virtual PointSensitivityBuilder parSpreadSensitivity(ResolvedCdsIndex cdsIndex, CreditRatesProvider ratesProvider, LocalDate referenceDate, ReferenceData refData)
        {
            ResolvedCds cds = cdsIndex.toSingleNameCds();

            return(underlyingPricer.parSpreadSensitivity(cds, ratesProvider, referenceDate, refData));
        }
        /// <summary>
        /// Calculates the par spread sensitivity of the underling product.
        /// <para>
        /// The par spread sensitivity of the product is the sensitivity of par spread to the underlying curves.
        ///
        /// </para>
        /// </summary>
        /// <param name="trade">  the trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <param name="refData">  the reference data </param>
        /// <returns> the present value sensitivity </returns>
        public virtual PointSensitivities parSpreadSensitivity(ResolvedCdsTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
        {
            LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData);

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