/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.schedule; import static org.testng.AssertJUnit.assertEquals; import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; import org.testng.annotations.Test; import org.threeten.bp.LocalDate; import com.opengamma.financial.convention.calendar.Calendar; import com.opengamma.financial.convention.calendar.MondayToFridayCalendar; import com.opengamma.timeseries.date.localdate.ImmutableLocalDateDoubleTimeSeries; import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class NoPaddingTimeSeriesSamplingFunctionTest { private static final LocalDate START = LocalDate.of(2009, 1, 1); private static final LocalDate END = LocalDate.of(2010, 10, 1); private static final DailyScheduleCalculator DAILY = new DailyScheduleCalculator(); private static final NoPaddingTimeSeriesSamplingFunction F = new NoPaddingTimeSeriesSamplingFunction(); private static final Calendar WEEKEND_CALENDAR = new MondayToFridayCalendar("Weekend"); private static final HolidayDateRemovalFunction HOLIDAY_REMOVER = HolidayDateRemovalFunction.getInstance(); private static final LocalDate[] DAILY_SCHEDULE = HOLIDAY_REMOVER.getStrippedSchedule(DAILY.getSchedule(START, END, true, true), WEEKEND_CALENDAR); private static final LocalDate MISSING_DAY_TUESDAY = LocalDate.of(2009, 2, 6); private static final LocalDateDoubleTimeSeries TS_NO_MISSING_DATA; private static final LocalDateDoubleTimeSeries TS_MISSING_DATA; private static final LocalDateDoubleTimeSeries TS_MISSING_MONTH_DATA; static { final List<LocalDate> t1 = new ArrayList<>(); final List<Double> d1 = new ArrayList<>(); final List<LocalDate> t2 = new ArrayList<>(); final List<Double> d2 = new ArrayList<>(); final List<LocalDate> t3 = new ArrayList<>(); final List<Double> d3 = new ArrayList<>(); for (int i = 0; i < DAILY_SCHEDULE.length; i++) { t1.add(DAILY_SCHEDULE[i]); d1.add(Double.valueOf(i)); if (WEEKEND_CALENDAR.isWorkingDay(DAILY_SCHEDULE[i])) { t3.add(DAILY_SCHEDULE[i]); d3.add(Double.valueOf(i)); } if (!DAILY_SCHEDULE[i].equals(MISSING_DAY_TUESDAY)) { t2.add(DAILY_SCHEDULE[i]); d2.add(Double.valueOf(i)); } } TS_NO_MISSING_DATA = ImmutableLocalDateDoubleTimeSeries.of(t1, d1); TS_MISSING_DATA = ImmutableLocalDateDoubleTimeSeries.of(t2, d2); TS_MISSING_MONTH_DATA = ImmutableLocalDateDoubleTimeSeries.of(t3, d3); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullTS() { F.getSampledTimeSeries(null, DAILY_SCHEDULE); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullSchedule() { F.getSampledTimeSeries(TS_NO_MISSING_DATA, null); } @Test public void testNoMissingData() { final LocalDateDoubleTimeSeries result = F.getSampledTimeSeries(TS_NO_MISSING_DATA, DAILY_SCHEDULE); assertEquals(TS_NO_MISSING_DATA.size(), result.size()); int i = 0; for (final Entry<LocalDate, Double> entry : result) { assertEquals(TS_NO_MISSING_DATA.getTimeAtIndex(i), entry.getKey()); assertEquals(TS_NO_MISSING_DATA.getValueAtIndex(i++), entry.getValue(), 0); } } @Test public void testOneDayMissingData() { final LocalDateDoubleTimeSeries result = F.getSampledTimeSeries(TS_MISSING_DATA, DAILY_SCHEDULE); assertEquals(result.size(), TS_MISSING_DATA.size()); int i = 0; for (final Entry<LocalDate, Double> entry : result) { assertEquals(TS_MISSING_DATA.getTimeAtIndex(i), entry.getKey()); if (entry.getKey().equals(MISSING_DAY_TUESDAY)) { assertEquals(TS_MISSING_DATA.getValueAtIndex(i - 1), entry.getValue(), 0); } else { assertEquals(TS_MISSING_DATA.getValueAtIndex(i), entry.getValue(), 0); } i++; } } @Test public void testOneMonthMissingData() { final LocalDateDoubleTimeSeries result = F.getSampledTimeSeries(TS_MISSING_MONTH_DATA, DAILY_SCHEDULE); assertEquals(result.size(), TS_MISSING_MONTH_DATA.size()); int i = 0; for (final Entry<LocalDate, Double> entry : result) { assertEquals(TS_MISSING_MONTH_DATA.getTimeAtIndex(i), entry.getKey()); assertEquals(TS_MISSING_MONTH_DATA.getValueAtIndex(i), entry.getValue(), 0); i++; } } }