/// <summary>
	  /// Test par spread for ISDA FRA Discounting method.
	  /// </summary>
	  public virtual void test_parSpread_ISDA()
	  {
		ResolvedFra fraExp = RFRA;
		SimpleRatesProvider prov = createProvider(fraExp);

		DiscountingFraProductPricer test = DiscountingFraProductPricer.DEFAULT;
		double parSpread = test.parSpread(fraExp, prov);
		ResolvedFra fra = createNewFra(FRA, FRA.FixedRate + parSpread);
		CurrencyAmount pv = test.presentValue(fra, prov);
		assertEquals(pv.Amount, 0.0, TOLERANCE);

		// test via FraTrade
		DiscountingFraTradePricer testTrade = new DiscountingFraTradePricer(test);
		assertEquals(testTrade.parSpread(RFRA_TRADE, prov), test.parSpread(RFRA, prov));
	  }
	  /// <summary>
	  /// Test par spread for AFMA FRA Discounting method.
	  /// </summary>
	  public virtual void test_parSpread_AFMA()
	  {
		ResolvedFra fraExp = RFRA_AFMA;
		SimpleRatesProvider prov = createProvider(fraExp);

		DiscountingFraProductPricer test = DiscountingFraProductPricer.DEFAULT;
		double parSpread = test.parSpread(fraExp, prov);
		ResolvedFra fra = createNewFra(FRA_AFMA, FRA_AFMA.FixedRate + parSpread);
		CurrencyAmount pv = test.presentValue(fra, prov);
		assertEquals(pv.Amount, 0.0, TOLERANCE);
	  }
 /// <summary>
 /// Calculates the par spread of the FRA trade.
 /// <para>
 /// This is spread to be added to the fixed rate to have a present value of 0.
 ///
 /// </para>
 /// </summary>
 /// <param name="trade">  the trade </param>
 /// <param name="provider">  the rates provider </param>
 /// <returns> the par spread </returns>
 public virtual double parSpread(ResolvedFraTrade trade, RatesProvider provider)
 {
     return(productPricer.parSpread(trade.Product, provider));
 }
	  /// <summary>
	  /// Test par spread sensitivity for ISDA FRA Discounting method.
	  /// </summary>
	  public virtual void test_parSpreadSensitivity_ISDA()
	  {
		PointSensitivities sensiSpread = DEFAULT_PRICER.parSpreadSensitivity(RFRA, IMM_PROV);
		CurrencyParameterSensitivities sensiComputed = IMM_PROV.parameterSensitivity(sensiSpread);
		CurrencyParameterSensitivities sensiExpected = CAL_FD.sensitivity(IMM_PROV, (p) => CurrencyAmount.of(FRA.Currency, DEFAULT_PRICER.parSpread(RFRA, (p))));
		assertTrue(sensiComputed.equalWithTolerance(sensiExpected, EPS_FD));
		PointSensitivities sensiRate = DEFAULT_PRICER.parRateSensitivity(RFRA, IMM_PROV);
		assertTrue(sensiSpread.equalWithTolerance(sensiRate, EPS_FD));

		// test via FraTrade
		assertEquals(DEFAULT_TRADE_PRICER.parRateSensitivity(RFRA_TRADE, IMM_PROV), DEFAULT_PRICER.parRateSensitivity(RFRA, IMM_PROV));
		assertEquals(DEFAULT_TRADE_PRICER.parSpreadSensitivity(RFRA_TRADE, IMM_PROV), DEFAULT_PRICER.parSpreadSensitivity(RFRA, IMM_PROV));
	  }