@Test(dataProvider = "ACTACTAFB") public void test_yearFraction_ACTACTAFB( int y1, int m1, int d1, int y2, int m2, int d2, double expected) { LocalDate date1 = LocalDate.of(y1, m1, d1); LocalDate date2 = LocalDate.of(y2, m2, d2); assertEquals(ACT_ACT_AFB.yearFraction(date1, date2), expected, TOLERANCE_ZERO); }
@Override public double relativeTime(ZonedDateTime dateTime) { ArgChecker.notNull(dateTime, "dateTime"); LocalDate valuationDate = valuationDateTime.toLocalDate(); LocalDate date = dateTime.toLocalDate(); return dayCount.relativeYearFraction(valuationDate, date); }
/** * Parses day count from the input string. * <p> * Parsing is case insensitive. * It leniently handles a variety of known variants of day counts. * * @param str the string to parse * @return the parsed value * @throws IllegalArgumentException if the string cannot be parsed */ public static DayCount parseDayCount(String str) { return DayCount.extendedEnum().findLenient(str) .orElseThrow(() -> new IllegalArgumentException( "Unknown DayCount value, must be one of " + DayCount.extendedEnum().lookupAllNormalized().keySet() + " but was '" + str + "'")); }
@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); } }
public void test_yearFraction_badOrder() { DayCount test = DayCount.of("Bus/252 EUTA"); LocalDate date1 = date(2014, 12, 2); LocalDate date2 = date(2014, 12, 1); assertThrowsIllegalArg(() -> test.yearFraction(date1, date2)); }
private Object readResolve() { return DayCount.of(name); }
public void test_serialization() { assertSerialization(DayCount.ofBus252(EUTA)); }
@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_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); } }
public void test_yearFraction() { 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.yearFraction(date1, date2), EUTA.resolve(REF_DATA).daysBetween(date1, date2) / 252d); date2 = date2.plusDays(1); } }
@Test(dataProvider = "name") public void test_of_lookup(DayCount convention, String name) { assertEquals(DayCount.of(name), convention); }
public void test_jodaConvert() { assertJodaConvert(DayCount.class, DayCount.ofBus252(EUTA)); }
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); }
public void test_actAct_isdaTestCase_longFinalStub() { LocalDate start = LocalDate.of(1999, 11, 30); LocalDate end = LocalDate.of(2000, 4, 30); ScheduleInfo info = new Info(start.minus(P3M), end, end, true, P3M); assertEquals(ACT_ACT_ISDA.yearFraction(start, end), (32d / 365d) + (120d / 366d), TOLERANCE_ZERO); assertEquals(ACT_ACT_ICMA.yearFraction(start, end, info), (91d / (91d * 4d)) + (61d / (92d * 4)), TOLERANCE_ZERO); assertEquals(ACT_ACT_AFB.yearFraction(start, end), (152d / 366d), TOLERANCE_ZERO); }
@Override public double relativeTime(ZonedDateTime zonedDateTime) { ArgChecker.notNull(zonedDateTime, "date"); return dayCount.relativeYearFraction(valuationDateTime.toLocalDate(), zonedDateTime.toLocalDate()); }
@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); } }