@Test(dataProvider = "createSatSunWeekend") public void test_of_IterableIterable_satSunWeekend(LocalDate date, boolean isBusinessDay) { Iterable<LocalDate> holidays = Arrays.asList(MON_2014_07_14, FRI_2014_07_18); Iterable<DayOfWeek> weekendDays = Arrays.asList(SATURDAY, SUNDAY); ImmutableHolidayCalendar test = ImmutableHolidayCalendar.of(TEST_ID, holidays, weekendDays); assertEquals(test.isBusinessDay(date), isBusinessDay); assertEquals(test.isHoliday(date), !isBusinessDay); assertEquals(test.getHolidays(), ImmutableSortedSet.copyOf(holidays)); assertEquals(test.getWeekendDays(), ImmutableSet.of(SATURDAY, SUNDAY)); }
public void test_combined() { ImmutableHolidayCalendar base1 = ImmutableHolidayCalendar.of(TEST_ID, ImmutableList.of(MON_2014_07_14), SATURDAY, SUNDAY); ImmutableHolidayCalendar base2 = ImmutableHolidayCalendar.of(TEST_ID2, ImmutableList.of(WED_2014_07_16), FRIDAY, SATURDAY); ImmutableHolidayCalendar test = ImmutableHolidayCalendar.combined(base1, base2); assertEquals(test.getId(), base1.getId().combinedWith(base2.getId())); assertEquals(test.getName(), base1.getId().combinedWith(base2.getId()).getName()); assertEquals(test.getHolidays(), ImmutableList.of(MON_2014_07_14, WED_2014_07_16)); assertEquals(test.getWeekendDays(), ImmutableSet.of(FRIDAY, SATURDAY, SUNDAY)); }
if (endYear1 < cal2.startYear || endYear2 < cal1.startYear) { ImmutableSortedSet<LocalDate> newHolidays = ImmutableSortedSet.copyOf(Iterables.concat(cal1.getHolidays(), cal2.getHolidays())); ImmutableSet<DayOfWeek> newWeekends = ImmutableSet.copyOf(Iterables.concat(cal1.getWeekendDays(), cal2.getWeekendDays())); return of(newId, newHolidays, newWeekends); return new ImmutableHolidayCalendar(newId, newWeekends, newStartYear, newLookup, false);
public void test_equals() { ImmutableHolidayCalendar a1 = ImmutableHolidayCalendar.of(TEST_ID, Arrays.asList(WED_2014_07_16), SATURDAY, SUNDAY); ImmutableHolidayCalendar a2 = ImmutableHolidayCalendar.of(TEST_ID, Arrays.asList(WED_2014_07_16), SATURDAY, SUNDAY); ImmutableHolidayCalendar b = ImmutableHolidayCalendar.of(TEST_ID2, Arrays.asList(WED_2014_07_16), SATURDAY, SUNDAY); ImmutableHolidayCalendar c = ImmutableHolidayCalendar.of(TEST_ID, Arrays.asList(THU_2014_07_10), SATURDAY, SUNDAY); assertEquals(a1.equals(a2), true); assertEquals(a1.equals(b), false); assertEquals(a1.equals(c), true); // only name compared }
@SuppressWarnings("unchecked") private <T> T tryDefaultValue(ReferenceDataId<T> id) { if (id instanceof HolidayCalendarId) { return (T) ImmutableHolidayCalendar.of((HolidayCalendarId) id, ImmutableList.of(), WEEKEND_DAYS); } return null; }
public void test_combineWith_same() { Iterable<LocalDate> holidays = Arrays.asList(WED_2014_07_16); ImmutableHolidayCalendar base = ImmutableHolidayCalendar.of(TEST_ID, holidays, SATURDAY, SUNDAY); HolidayCalendar test = base.combinedWith(base); assertSame(test, base); }
public void test_isBusinessDay_outOfRange() { Iterable<LocalDate> holidays = Arrays.asList(MON_2014_07_14, TUE_2014_07_15); ImmutableHolidayCalendar test = ImmutableHolidayCalendar.of(TEST_ID, holidays, SATURDAY, SUNDAY); assertEquals(test.isBusinessDay(LocalDate.of(2013, 12, 31)), true); assertEquals(test.isBusinessDay(LocalDate.of(2015, 1, 1)), true); assertThrowsIllegalArg(() -> test.isBusinessDay(LocalDate.MIN)); assertThrowsIllegalArg(() -> test.isBusinessDay(LocalDate.MAX)); }
@Override public Object build(Class<?> beanType, BeanBuilder<?> builder) { ConcurrentMap<MetaProperty<?>, Object> buffer = ((BufferingBeanBuilder<?>) builder).getBuffer(); HolidayCalendarId id = builder.get(ID); if (buffer.containsKey(HOLIDAYS) && buffer.containsKey(WEEKEND_DAYS)) { Set<LocalDate> holidays = builder.get(HOLIDAYS); Set<DayOfWeek> weekendDays = builder.get(WEEKEND_DAYS); return ImmutableHolidayCalendar.of(id, holidays, weekendDays); } else { int weekends = builder.get(WEEKENDS); int startYear = builder.get(START_YEAR); int[] lookup = builder.get(LOOKUP); return new ImmutableHolidayCalendar(id, weekends, startYear, lookup, false); } }
public void test_broadCheck() { LocalDate start = LocalDate.of(2010, 1, 1); LocalDate end = LocalDate.of(2020, 1, 1); Random random = new Random(547698); for (int i = 0; i < 10; i++) { // create sample holiday dates LocalDate date = start; SortedSet<LocalDate> set = new TreeSet<>(); while (date.isBefore(end)) { set.add(date); date = date.plusDays(random.nextInt(10) + 1); } // check holiday calendar works using simple algorithm ImmutableHolidayCalendar test = ImmutableHolidayCalendar.of( HolidayCalendarId.of("TestBroad" + i), set, SATURDAY, SUNDAY); LocalDate checkDate = start; while (checkDate.isBefore(end)) { DayOfWeek dow = checkDate.getDayOfWeek(); assertEquals(test.isHoliday(checkDate), dow == SATURDAY || dow == SUNDAY || set.contains(checkDate)); checkDate = checkDate.plusDays(1); } } }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 3355: // id return ((ImmutableHolidayCalendar) bean).getId(); case -621930260: // weekends return ((ImmutableHolidayCalendar) bean).weekends; case -2129150017: // startYear return ((ImmutableHolidayCalendar) bean).startYear; case -1097094790: // lookup return ((ImmutableHolidayCalendar) bean).lookup; } return super.propertyGet(bean, propertyName, quiet); }
/** * Returns the name of the calendar. * * @return the descriptive string */ @Override public String toString() { return "HolidayCalendar[" + getName() + ']'; }
static ImmutableHolidayCalendar of(HolidayCalendarId id, SortedSet<LocalDate> holidays, Set<DayOfWeek> weekendDays) { ArgChecker.notNull(id, "id"); ArgChecker.notNull(holidays, "holidays"); ArgChecker.notNull(weekendDays, "weekendDays"); int weekends = weekendDays.stream().mapToInt(dow -> 1 << (dow.getValue() - 1)).sum(); int startYear = 0; int[] lookup = new int[0]; if (holidays.isEmpty()) { // special case where no holiday dates are specified startYear = 0; lookup = new int[0]; } else { // normal case where holidays are specified startYear = holidays.first().getYear(); int endYearExclusive = holidays.last().getYear() + 1; lookup = buildLookupArray(holidays, weekendDays, startYear, endYearExclusive); } return new ImmutableHolidayCalendar(id, weekends, startYear, lookup); }
@Override public ImmutableHolidayCalendar build() { return new ImmutableHolidayCalendar( id, weekends, startYear, lookup); }
@Test(dataProvider = "shift") public void test_adjustBy(LocalDate date, int amount, LocalDate expected) { assertEquals(date.with(HOLCAL_MON_WED.adjustBy(amount)), expected); }
public void test_combinedWith() { HolidayCalendar combined = ImmutableHolidayCalendar.combined((ImmutableHolidayCalendar) JPTO, (ImmutableHolidayCalendar) USNY); LocalDate date = LocalDate.of(1950, 1, 1); while (date.getYear() < 2040) { assertEquals(combined.isHoliday(date), JPTO.isHoliday(date) || USNY.isHoliday(date), "Date: " + date); date = date.plusDays(1); } }
/** * Obtains an instance from a set of holiday dates and weekend days. * <p> * The holiday dates will be extracted into a set with duplicates ignored. * The minimum supported date for query is the start of the year of the earliest holiday. * The maximum supported date for query is the end of the year of the latest holiday. * <p> * The weekend days may be empty, in which case the holiday dates should contain any weekends. * * @param id the identifier * @param holidays the set of holiday dates * @param weekendDays the days that define the weekend, if empty then weekends are treated as business days * @return the holiday calendar */ public static ImmutableHolidayCalendar of( HolidayCalendarId id, Iterable<LocalDate> holidays, Iterable<DayOfWeek> weekendDays) { return of(id, ImmutableSortedSet.copyOf(holidays), Sets.immutableEnumSet(weekendDays)); }
public void test_combined_differentStartYear1() { Iterable<LocalDate> holidays1 = Arrays.asList(WED_2015_04_01); ImmutableHolidayCalendar base1 = ImmutableHolidayCalendar.of(TEST_ID, holidays1, SATURDAY, SUNDAY); Iterable<LocalDate> holidays2 = Arrays.asList(MON_2014_07_14, TUE_2015_03_31); ImmutableHolidayCalendar base2 = ImmutableHolidayCalendar.of(TEST_ID2, holidays2, SATURDAY, SUNDAY); HolidayCalendar test = ImmutableHolidayCalendar.combined(base1, base2); assertEquals(test.getName(), "Test1+Test2"); assertEquals(test.isHoliday(THU_2014_07_10), false); assertEquals(test.isHoliday(FRI_2014_07_11), false); assertEquals(test.isHoliday(SAT_2014_07_12), true); assertEquals(test.isHoliday(SUN_2014_07_13), true); assertEquals(test.isHoliday(MON_2014_07_14), true); assertEquals(test.isHoliday(TUE_2014_07_15), false); assertEquals(test.isHoliday(MON_2015_03_30), false); assertEquals(test.isHoliday(TUE_2015_03_31), true); assertEquals(test.isHoliday(WED_2015_04_01), true); assertEquals(test.isHoliday(THU_2015_04_02), false); }
public void test_combineWith_none() { Iterable<LocalDate> holidays = Arrays.asList(WED_2014_07_16); ImmutableHolidayCalendar base = ImmutableHolidayCalendar.of(TEST_ID, holidays, SATURDAY, SUNDAY); HolidayCalendar test = base.combinedWith(HolidayCalendars.NO_HOLIDAYS); assertSame(test, base); }
public void test_readOldJodaFormat() throws IOException { ResourceLocator file = ResourceLocator.ofClasspath("com/opengamma/strata/basics/date/ImmutableHolidayCalendar-Old.json"); String str = file.getCharSource().read(); ImmutableHolidayCalendar cal = JodaBeanSer.PRETTY.jsonReader().read(str, ImmutableHolidayCalendar.class); assertEquals(cal.getId(), HolidayCalendarId.of("NZAU")); }