private SchedulePeriod createSchedulePeriod(List<SchedulePeriod> accruals) { SchedulePeriod first = accruals.get(0); if (accruals.size() == 1) { return first; } SchedulePeriod last = accruals.get(accruals.size() - 1); return SchedulePeriod.of( first.getStartDate(), last.getEndDate(), first.getUnadjustedStartDate(), last.getUnadjustedEndDate()); }
public void test_contains() { assertEquals(SchedulePeriod.of(JUN_16, JUL_18, JUN_16, JUL_17).contains(JUN_15), false); assertEquals(SchedulePeriod.of(JUN_16, JUL_18, JUN_16, JUL_17).contains(JUN_16), true); assertEquals(SchedulePeriod.of(JUN_16, JUL_18, JUN_16, JUL_17).contains(JUL_05), true); assertEquals(SchedulePeriod.of(JUN_16, JUL_18, JUN_16, JUL_17).contains(JUL_17), true); assertEquals(SchedulePeriod.of(JUN_16, JUL_18, JUN_16, JUL_17).contains(JUL_18), false); }
public void test_isRegular() { assertEquals(SchedulePeriod.of(JUN_18, JUL_18).isRegular(P1M, DAY_18), true); assertEquals(SchedulePeriod.of(JUN_18, JUL_05).isRegular(P1M, DAY_18), false); assertEquals(SchedulePeriod.of(JUL_05, JUL_18).isRegular(P1M, DAY_18), false); assertEquals(SchedulePeriod.of(JUN_18, JUL_05).isRegular(P2M, DAY_18), false); }
/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(SchedulePeriod beanToCopy) { this.startDate = beanToCopy.getStartDate(); this.endDate = beanToCopy.getEndDate(); this.unadjustedStartDate = beanToCopy.getUnadjustedStartDate(); this.unadjustedEndDate = beanToCopy.getUnadjustedEndDate(); }
LocalDate selectBaseDate(SchedulePeriod period) { return (this == PERIOD_END ? period.getEndDate() : period.getStartDate()); }
/** * Finds the period end date given a date in the period. * <p> * The first matching period is returned. * The adjusted start and end dates of each period are used in the comparison. * The start date is included, the end date is excluded. * * @param date the date to find * @return the end date of the period that includes the specified date */ @Override public LocalDate getPeriodEndDate(LocalDate date) { return periods.stream() .filter(p -> p.contains(date)) .map(p -> p.getEndDate()) .findFirst() .orElseThrow(() -> new IllegalArgumentException("Date is not contained in any period")); }
public void test_yearFraction() { SchedulePeriod test = SchedulePeriod.of(JUN_16, JUL_18, JUN_16, JUL_17); Schedule schedule = Schedule.ofTerm(test); assertEquals( test.yearFraction(DayCounts.ACT_360, schedule), DayCounts.ACT_360.yearFraction(JUN_16, JUL_18, schedule), TOLERANCE); }
@Override public ImmutableList<RateAccrualPeriod> createAccrualPeriods( Schedule accrualSchedule, Schedule paymentSchedule, ReferenceData refData) { // resolve data by schedule DoubleArray resolvedGearings = firstNonNull(gearing, ALWAYS_1).resolveValues(accrualSchedule); DoubleArray resolvedSpreads = firstNonNull(spread, ALWAYS_0).resolveValues(accrualSchedule); // build accrual periods ImmutableList.Builder<RateAccrualPeriod> accrualPeriods = ImmutableList.builder(); for (int i = 0; i < accrualSchedule.size(); i++) { SchedulePeriod period = accrualSchedule.getPeriod(i); double yearFraction = period.yearFraction(dayCount, accrualSchedule); RateComputation rateComputation = createRateComputation(period, paymentSchedule, refData); accrualPeriods.add(new RateAccrualPeriod( period, yearFraction, rateComputation, resolvedGearings.get(i), resolvedSpreads.get(i), negativeRateMethod)); } return accrualPeriods.build(); }
public void test_of_null() { assertThrowsIllegalArg(() -> SchedulePeriod.of(null, JUL_18, JUL_04, JUL_17)); assertThrowsIllegalArg(() -> SchedulePeriod.of(JUL_05, null, JUL_04, JUL_17)); assertThrowsIllegalArg(() -> SchedulePeriod.of(JUL_05, JUL_18, null, JUL_17)); assertThrowsIllegalArg(() -> SchedulePeriod.of(JUL_05, JUL_18, JUL_04, null)); assertThrowsIllegalArg(() -> SchedulePeriod.of(null, null, null, null)); }
public void test_subSchedule_3monthIn3Month() { SchedulePeriod test = SchedulePeriod.of(JUN_17, SEP_17); Schedule schedule = test.subSchedule(P3M, RollConventions.DAY_17, StubConvention.NONE, BusinessDayAdjustment.NONE) .createSchedule(REF_DATA); assertEquals(schedule.size(), 1); assertEquals(schedule.getPeriod(0), SchedulePeriod.of(JUN_17, SEP_17)); }
public void test_merge_badGroupSize() { Schedule test = Schedule.builder() .periods(ImmutableList.of(P2_NORMAL, P3_NORMAL, P4_NORMAL, P5_NORMAL, P6_NORMAL)) .frequency(P1M) .rollConvention(DAY_17) .build(); assertThrows( () -> test.merge(2, P2_NORMAL.getUnadjustedStartDate(), P6_NORMAL.getUnadjustedEndDate()), ScheduleException.class, "Unable to merge schedule, firstRegularStartDate " + P2_NORMAL.getUnadjustedStartDate() + " and lastRegularEndDate " + P6_NORMAL.getUnadjustedEndDate() + " cannot be used to create regular periods of frequency 'P2M'"); }
public void test_toUnadjusted() { assertEquals(SchedulePeriod.of(JUN_15, SEP_17).toUnadjusted(), SchedulePeriod.of(JUN_15, SEP_17)); assertEquals(SchedulePeriod.of(JUN_16, SEP_17, JUN_15, SEP_17).toUnadjusted(), SchedulePeriod.of(JUN_15, SEP_17)); assertEquals(SchedulePeriod.of(JUN_16, JUL_18, JUN_16, JUL_17).toUnadjusted(), SchedulePeriod.of(JUN_16, JUL_17)); }
public void test_lengthInDays() { assertEquals(SchedulePeriod.of(JUN_16, JUN_18, JUN_16, JUN_18).lengthInDays(), 2); assertEquals(SchedulePeriod.of(JUN_16, JUL_18, JUN_16, JUL_17).lengthInDays(), 32); }
public void test_toAdjusted() { SchedulePeriod test1 = SchedulePeriod.of(JUN_15, SEP_17); assertEquals(test1.toAdjusted(date -> date), test1); assertEquals(test1.toAdjusted(date -> date.equals(JUN_15) ? JUN_16 : date), SchedulePeriod.of(JUN_16, SEP_17, JUN_15, SEP_17)); SchedulePeriod test2 = SchedulePeriod.of(JUN_16, AUG_17); assertEquals(test2.toAdjusted(date -> date.equals(AUG_17) ? AUG_18 : date), SchedulePeriod.of(JUN_16, AUG_18, JUN_16, AUG_17)); }
public void coverage_equals() { SchedulePeriod a1 = SchedulePeriod.of(JUL_05, JUL_18, JUL_04, JUL_17); SchedulePeriod a2 = SchedulePeriod.of(JUL_05, JUL_18, JUL_04, JUL_17); SchedulePeriod b = SchedulePeriod.of(JUL_04, JUL_18, JUL_04, JUL_17); SchedulePeriod c = SchedulePeriod.of(JUL_05, JUL_17, JUL_04, JUL_17); SchedulePeriod d = SchedulePeriod.of(JUL_05, JUL_18, JUL_05, JUL_17); SchedulePeriod e = SchedulePeriod.of(JUL_05, JUL_18, JUL_04, JUL_18); assertEquals(a1.equals(a1), true); assertEquals(a1.equals(a2), true); assertEquals(a1.equals(b), false); assertEquals(a1.equals(c), false); assertEquals(a1.equals(d), false); assertEquals(a1.equals(e), false); }
/** * Gets the unadjusted end date. * <p> * The end date before any business day adjustment. * * @return the unadjusted schedule end date */ public LocalDate getUnadjustedEndDate() { return getLastPeriod().getUnadjustedEndDate(); }
/** * Gets the end date of the schedule. * <p> * The last date in the schedule, typically treated as exclusive. * If the schedule adjusts for business days, then this is the adjusted date. * * @return the schedule end date */ @Override public LocalDate getEndDate() { return getLastPeriod().getEndDate(); }
/** * Gets the unadjusted start date. * <p> * The start date before any business day adjustment. * * @return the unadjusted schedule start date */ public LocalDate getUnadjustedStartDate() { return getFirstPeriod().getUnadjustedStartDate(); }
/** * Gets the start date of the schedule. * <p> * The first date in the schedule, typically treated as inclusive. * If the schedule adjusts for business days, then this is the adjusted date. * * @return the schedule start date */ @Override public LocalDate getStartDate() { return getFirstPeriod().getStartDate(); }
private boolean isInitialStub() { return !isTerm() && !getFirstPeriod().isRegular(frequency, rollConvention); }