@Test(dataProvider = "days") public void test_days(DayCount dayCount, int y1, int m1, int d1, int y2, int m2, int d2, int value) { int expected = (value == SIMPLE_30_360Days ? calc360Days(y1, m1, d1, y2, m2, d2) : value); LocalDate date1 = LocalDate.of(y1, m1, d1); LocalDate date2 = LocalDate.of(y2, m2, d2); assertEquals(dayCount.days(date1, date2), expected, TOLERANCE_ZERO); }
@Test(dataProvider = "types") public void test_same(DayCount type) { if (type != ONE_ONE) { assertEquals(type.yearFraction(JAN_02, JAN_02), 0d, TOLERANCE_ZERO); assertEquals(type.days(JAN_02, JAN_02), 0); } }
@Test(dataProvider = "types") public void test_halfYear(DayCount type) { // sanity check to ensure that half year has fraction close to half if (type != ONE_ONE) { ScheduleInfo info = new Info(JAN_01, JAN_01_NEXT, JAN_01_NEXT, false, P12M); assertEquals(type.yearFraction(JAN_01, JUL_01, info), 0.5d, 0.01d); assertEquals(type.days(JAN_01, JUL_01), 182, 2); } }
@Test(dataProvider = "types") public void test_wholeYear(DayCount type) { // sanity check to ensure that one year has fraction close to one if (type != ONE_ONE) { ScheduleInfo info = new Info(JAN_01, JAN_01_NEXT, JAN_01_NEXT, false, P12M); assertEquals(type.yearFraction(JAN_01, JAN_01_NEXT, info), 1d, 0.02d); assertEquals(type.days(JAN_01, JAN_01_NEXT), 365, 5); } }
@Test(dataProvider = "types") public void test_wrongOrder(DayCount type) { assertThrowsIllegalArg(() -> type.yearFraction(JAN_02, JAN_01)); assertThrowsIllegalArg(() -> type.days(JAN_02, JAN_01)); }
@Test(dataProvider = "types") public void test_null(DayCount type) { assertThrowsRuntime(() -> type.yearFraction(null, JAN_01)); assertThrowsRuntime(() -> type.yearFraction(JAN_01, null)); assertThrowsRuntime(() -> type.yearFraction(null, null)); assertThrowsRuntime(() -> type.days(null, JAN_01)); assertThrowsRuntime(() -> type.days(JAN_01, null)); assertThrowsRuntime(() -> type.days(null, null)); }
public void test_days() { DayCount test = DayCount.of("Bus/252 EUTA"); LocalDate date1 = date(2014, 12, 1); LocalDate date2 = date(2014, 12, 1); for (int i = 0; i < 366; i++) { assertEquals(test.days(date1, date2), EUTA.resolve(REF_DATA).daysBetween(date1, date2)); date2 = date2.plusDays(1); } }
private void explainPresentValue( RateAccrualPeriod accrualPeriod, DayCount dayCount, Currency currency, double notional, RatesProvider provider, ExplainMapBuilder builder) { double rawRate = rateComputationFn.explainRate( accrualPeriod.getRateComputation(), accrualPeriod.getStartDate(), accrualPeriod.getEndDate(), provider, builder); double payOffRate = rawRate * accrualPeriod.getGearing() + accrualPeriod.getSpread(); double ua = unitNotionalAccrual(accrualPeriod, accrualPeriod.getSpread(), provider); // Note that the forecast value is not published since this is potentially misleading when // compounding is being applied, and when it isn't then it's the same as the forecast // value of the payment period. builder.put(ExplainKey.ENTRY_TYPE, "AccrualPeriod"); builder.put(ExplainKey.START_DATE, accrualPeriod.getStartDate()); builder.put(ExplainKey.UNADJUSTED_START_DATE, accrualPeriod.getUnadjustedStartDate()); builder.put(ExplainKey.END_DATE, accrualPeriod.getEndDate()); builder.put(ExplainKey.UNADJUSTED_END_DATE, accrualPeriod.getUnadjustedEndDate()); builder.put(ExplainKey.ACCRUAL_YEAR_FRACTION, accrualPeriod.getYearFraction()); builder.put(ExplainKey.ACCRUAL_DAYS, dayCount.days(accrualPeriod.getStartDate(), accrualPeriod.getEndDate())); builder.put(ExplainKey.DAYS, (int) DAYS.between(accrualPeriod.getStartDate(), accrualPeriod.getEndDate())); builder.put(ExplainKey.GEARING, accrualPeriod.getGearing()); builder.put(ExplainKey.SPREAD, accrualPeriod.getSpread()); builder.put(ExplainKey.PAY_OFF_RATE, accrualPeriod.getNegativeRateMethod().adjust(payOffRate)); builder.put(ExplainKey.UNIT_AMOUNT, ua); }