final int fixingDays = 2;
final Array gearings = new Array(1).fill(1.0);
final Array spreadsArr = new Array(0);
final double[] spreads = { 0 };
final ConvertibleFloatingRateBond euFloating = new ConvertibleFloatingRateBond(
euExercise, vars.conversionRatio, vars.no_dividends,
vars.no_callability, vars.creditSpread, vars.issueDate,
vars.settlementDays, index, fixingDays, spreads,
vars.dayCounter, schedule, vars.redemption);
euFloating.setPricingEngine(engine);
final ConvertibleFloatingRateBond amFloating = new ConvertibleFloatingRateBond(
amExercise, vars.conversionRatio, vars.no_dividends,
vars.no_callability, vars.creditSpread, vars.issueDate,
vars.settlementDays, index, fixingDays, spreads,
vars.dayCounter, schedule, vars.redemption);
amFloating.setPricingEngine(engine);
final IborCouponPricer pricer = new BlackIborCouponPricer(
new Handle<OptionletVolatilityStructure>());
final Schedule floatSchedule = new Schedule(vars.issueDate,
vars.maturityDate, new Period(vars.frequency), vars.calendar,
BusinessDayConvention.Following,
BusinessDayConvention.Following, DateGeneration.Rule.Backward,
false);
final FloatingRateBond floating = new FloatingRateBond(vars.settlementDays,
vars.faceAmount, floatSchedule, index, vars.dayCounter,
BusinessDayConvention.Following, fixingDays, gearings,
spreadsArr, new Array(0), new Array(0), false, vars.redemption,
vars.issueDate);
floating.setPricingEngine(bondEngine);
PricerSetter.setCouponPricer(floating.cashflows(), pricer);
tolerance = 2.0e-2 * (vars.faceAmount / 100.0);
error = Math.abs(euFloating.NPV() - floating.settlementValue());
if (error > tolerance) {
fail("failed to reproduce floating-rate bond price:"
+ "\n calculated: " + euFloating.NPV()
+ "\n expected: " + floating.settlementValue()
+ "\n error: " + error);
}
error = Math.abs(amFloating.NPV() - floating.settlementValue());
if (error > tolerance) {
fail("failed to reproduce floating-rate bond price:"
+ "\n calculated: " + amFloating.NPV()
+ "\n expected: " + floating.settlementValue()
+ "\n error: " + error);
}
}