/**
* 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 static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import org.threeten.bp.ZonedDateTime;
import org.threeten.bp.temporal.Temporal;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.time.DateUtils;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class DailyScheduleCalculatorTest extends ScheduleCalculatorTestCase {
private static final DailyScheduleCalculator CALCULATOR = new DailyScheduleCalculator();
@Override
public Schedule getScheduleCalculator() {
return CALCULATOR;
}
@Test
public void testSameStartAndEnd1() {
final LocalDate date = LocalDate.of(2000, 1, 1);
final LocalDate[] forward = CALCULATOR.getSchedule(date, date, false, true);
assertEquals(forward.length, 1);
assertEquals(forward[0], date);
assertArrayEquals(CALCULATOR.getSchedule(date, date), forward);
assertArrayEquals(CALCULATOR.getSchedule(date, date, true, true), forward);
}
@Test
public void testSameStartAndEnd2() {
final ZonedDateTime date = DateUtils.getUTCDate(2000, 1, 1);
final ZonedDateTime[] forward = CALCULATOR.getSchedule(date, date, false, true);
assertEquals(forward.length, 1);
assertEquals(forward[0], date);
assertArrayEquals(CALCULATOR.getSchedule(date, date), forward);
assertArrayEquals(CALCULATOR.getSchedule(date, date, true, true), forward);
}
@Test
public void test1() {
final LocalDate startDate = LocalDate.of(2000, 1, 1);
final LocalDate endDate = LocalDate.of(2002, 2, 9);
final LocalDate[] forward = CALCULATOR.getSchedule(startDate, endDate);
assertCalculator(startDate, endDate, forward);
assertArrayEquals(CALCULATOR.getSchedule(startDate, endDate, false, true), forward);
assertArrayEquals(CALCULATOR.getSchedule(startDate, endDate, true, true), forward);
assertArrayEquals(CALCULATOR.getSchedule(startDate, endDate, false, false), forward);
assertArrayEquals(CALCULATOR.getSchedule(startDate, endDate, true, false), forward);
}
@Test
public void test2() {
final ZonedDateTime startDate = DateUtils.getUTCDate(2000, 1, 1);
final ZonedDateTime endDate = DateUtils.getUTCDate(2002, 2, 9);
final ZonedDateTime[] forward = CALCULATOR.getSchedule(startDate, endDate);
assertCalculator(startDate, endDate, forward);
assertArrayEquals(CALCULATOR.getSchedule(startDate, endDate, false, true), forward);
assertArrayEquals(CALCULATOR.getSchedule(startDate, endDate, true, true), forward);
assertArrayEquals(CALCULATOR.getSchedule(startDate, endDate, false, false), forward);
assertArrayEquals(CALCULATOR.getSchedule(startDate, endDate, true, false), forward);
}
private <T extends Temporal> void assertCalculator(final T startDate, final T endDate, final T[] forward) {
final int days = 771;
assertEquals(forward.length, days);
assertEquals(forward[0], startDate);
assertEquals(forward[days - 1], endDate);
assertEquals(forward[days - 1], endDate);
for (int i = 1; i < days; i++) {
assertEquals(DateUtils.getDaysBetween(forward[i], forward[i - 1]), 1);
}
}
}