//-------------------------------------------------------------------------
        protected internal virtual void testCalibrationAgainstISDA(IsdaCompliantCreditCurveCalibrator builder, DayCount dayCount, Currency currency, double tol)
        {
            IsdaCdsProductPricer pricer = new IsdaCdsProductPricer(builder.AccrualOnDefaultFormula);

            for (int i = 0; i < NUM_TESTS; i++)
            {
                LegalEntitySurvivalProbabilities creditCurve = builder.calibrate(ImmutableList.copyOf(NODE_CDS[i]), CurveName.of("credit"), CDS_MARKET_DATA[i], YIELD_CURVES[i], dayCount, currency, false, false, REF_DATA);
                ResolvedCdsTrade[]           expectedCds     = EXP_NODE_CDS[i];
                ImmutableCreditRatesProvider provider        = YIELD_CURVES[i].toBuilder().creditCurves(ImmutableMap.of(Pair.of(LEGAL_ENTITY, EUR), creditCurve)).build();
                double[] expected = builder.AccrualOnDefaultFormula == AccrualOnDefaultFormula.MARKIT_FIX ? EXP_PROB_MARKIT_FIX[i] : EXP_PROB_ISDA[i];
                for (int k = 0; k < N_OBS; k++)
                {
                    assertEquals(creditCurve.SurvivalProbabilities.discountFactor(OBS_TIMES[k]), expected[k], tol);
                }
                int m = expectedCds.Length;
                for (int j = 0; j < m; j++)
                {
                    ResolvedCdsTrade cdsFromNode = NODE_CDS[i][j].trade(1d, CDS_MARKET_DATA[i], REF_DATA).UnderlyingTrade.resolve(REF_DATA);
                    assertEquals(cdsFromNode.Product, expectedCds[j].Product);
                    double price1 = pricer.price(cdsFromNode.Product, provider, SPREADS[i][j], cdsFromNode.Info.SettlementDate.get(), PriceType.CLEAN, REF_DATA);
                    assertEquals(price1, 0.0, 5e-16);
                }
            }
        }
 /// <summary>
 /// Constructor specifying the formula to use for the accrued on default calculation.
 /// </summary>
 /// <param name="formula">  the formula </param>
 public IsdaHomogenousCdsIndexProductPricer(AccrualOnDefaultFormula formula)
 {
     this.underlyingPricer = new IsdaCdsProductPricer(formula);
 }
 /// <summary>
 /// The constructor with the accrual-on-default formula specified.
 /// </summary>
 /// <param name="formula">  the accrual-on-default formula </param>
 public IsdaCdsTradePricer(AccrualOnDefaultFormula formula)
 {
     this.productPricer = new IsdaCdsProductPricer(formula);
     this.upfrontPricer = DiscountingPaymentPricer.DEFAULT;
 }
 //-------------------------------------------------------------------------
 /// <summary>
 /// The default constructor.
 /// <para>
 /// The default pricers are used.
 /// </para>
 /// </summary>
 public IsdaCdsTradePricer()
 {
     this.productPricer = IsdaCdsProductPricer.DEFAULT;
     this.upfrontPricer = DiscountingPaymentPricer.DEFAULT;
 }