@Override public double yearFraction(LocalDate firstDate, LocalDate secondDate, ScheduleInfo scheduleInfo) { assertEquals(scheduleInfo.getStartDate(), base.getUnadjustedStartDate()); assertEquals(scheduleInfo.getEndDate(), base.getUnadjustedEndDate()); assertEquals(scheduleInfo.getPeriodEndDate(firstDate), period.getUnadjustedEndDate()); assertEquals(scheduleInfo.getFrequency(), base.getFrequency()); assertEquals(scheduleInfo.isEndOfMonthConvention(), eom.get()); return 0.5; }
@Override public double yearFraction(LocalDate firstDate, LocalDate secondDate, ScheduleInfo scheduleInfo) { assertEquals(scheduleInfo.getStartDate(), base.getUnadjustedStartDate()); assertEquals(scheduleInfo.getEndDate(), base.getUnadjustedEndDate()); assertEquals(scheduleInfo.getPeriodEndDate(firstDate), period.getUnadjustedEndDate()); assertEquals(scheduleInfo.getFrequency(), base.getFrequency()); assertEquals(scheduleInfo.isEndOfMonthConvention(), eom.get()); return 0.5; }
public void test_scheduleInfo() { ScheduleInfo test = new ScheduleInfo() {}; assertEquals(test.isEndOfMonthConvention(), true); assertThrows(() -> test.getStartDate(), UnsupportedOperationException.class); assertThrows(() -> test.getEndDate(), UnsupportedOperationException.class); assertThrows(() -> test.getFrequency(), UnsupportedOperationException.class); assertThrows(() -> test.getPeriodEndDate(JAN_01), UnsupportedOperationException.class); }
@Override public double calculateYearFraction(LocalDate firstDate, LocalDate secondDate, ScheduleInfo scheduleInfo) { // avoid using ScheduleInfo in this case if (firstDate.equals(secondDate)) { return 0d; } // calculation is based on the schedule period, firstDate assumed to be the start of the period LocalDate scheduleStartDate = scheduleInfo.getStartDate(); LocalDate scheduleEndDate = scheduleInfo.getEndDate(); LocalDate nextCouponDate = scheduleInfo.getPeriodEndDate(firstDate); Frequency freq = scheduleInfo.getFrequency(); boolean eom = scheduleInfo.isEndOfMonthConvention(); // final period, also handling single period schedules if (nextCouponDate.equals(scheduleEndDate)) { return finalPeriod(firstDate, secondDate, freq, eom); } // initial period if (firstDate.equals(scheduleStartDate)) { return initPeriod(firstDate, secondDate, nextCouponDate, freq, eom); } double actualDays = daysBetween(firstDate, secondDate); double periodDays = daysBetween(firstDate, nextCouponDate); return actualDays / (freq.eventsPerYear() * periodDays); }
@Override public double calculateYearFraction(LocalDate firstDate, LocalDate secondDate, ScheduleInfo scheduleInfo) { int d1 = firstDate.getDayOfMonth(); int d2 = secondDate.getDayOfMonth(); if (d1 == 31 || lastDayOfFebruary(firstDate)) { d1 = 30; } if (d2 == 31 || (lastDayOfFebruary(secondDate) && !secondDate.equals(scheduleInfo.getEndDate()))) { d2 = 30; } return thirty360( firstDate.getYear(), firstDate.getMonthValue(), d1, secondDate.getYear(), secondDate.getMonthValue(), d2); }