/**
* 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.AssertJUnit.assertFalse;
import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import org.threeten.bp.ZonedDateTime;
import com.opengamma.financial.convention.frequency.Frequency;
import com.opengamma.financial.convention.frequency.PeriodFrequency;
import com.opengamma.financial.convention.frequency.SimpleFrequencyFactory;
import com.opengamma.util.time.DateUtils;
/**
*
*/
public class ScheduleFactoryTest {
private static final LocalDate START1 = LocalDate.of(2000, 1, 31);
private static final LocalDate END1 = LocalDate.of(2002, 1, 31);
private static final ZonedDateTime START2 = DateUtils.getUTCDate(2000, 1, 31);
private static final ZonedDateTime END2 = DateUtils.getUTCDate(2002, 1, 31);
private static final Frequency QUARTERLY = SimpleFrequencyFactory.INSTANCE.getFrequency(4);
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullStartDate1() {
ScheduleFactory.getSchedule(null, END1, QUARTERLY, true, true, false);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullEndDate1() {
ScheduleFactory.getSchedule(START1, null, QUARTERLY, true, true, false);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullFrequency1() {
ScheduleFactory.getSchedule(START1, END1, null, true, false, false);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testBadFrequency1() {
final Frequency frequency = new Frequency() {
@Override
public String getConventionName() {
return null;
}
};
ScheduleFactory.getSchedule(START1, END1, frequency, true, false, false);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testBadPeriodsPerYear1() {
ScheduleFactory.getSchedule(START1, END1, 5, true, false, false);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testWeeklyWithEOMAdjustment1() {
ScheduleFactory.getSchedule(START1, END1, 52, true, true, false);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testDailyWithEOMAdjustment1() {
ScheduleFactory.getSchedule(START1, END1, 365, true, true, false);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullStartDate2() {
ScheduleFactory.getSchedule(null, END2, QUARTERLY, true, true, false);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullEndDate2() {
ScheduleFactory.getSchedule(START2, null, QUARTERLY, true, true, false);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullFrequency2() {
ScheduleFactory.getSchedule(START2, END2, null, true, false, false);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testBadFrequency2() {
final Frequency frequency = new Frequency() {
@Override
public String getConventionName() {
return null;
}
};
ScheduleFactory.getSchedule(START2, END2, frequency, true, false, false);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testBadPeriodsPerYear2() {
ScheduleFactory.getSchedule(START2, END2, 5, true, false, false);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testWeeklyWithEOMAdjustment2() {
ScheduleFactory.getSchedule(START2, END2, 52, true, true, false);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testDailyWithEOMAdjustment2() {
ScheduleFactory.getSchedule(START2, END2, 365, true, true, false);
}
@Test
public void testDaily() {
final LocalDate[] schedule1 = ScheduleFactory.getSchedule(START1, END1, 365, false, true, false);
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, 366, false, true, false));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, SimpleFrequencyFactory.INSTANCE.getFrequency("Daily"), false, true, false));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, PeriodFrequency.DAILY, false, true, false));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, 365, false, true, true));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, 366, false, true, true));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, SimpleFrequencyFactory.INSTANCE.getFrequency("Daily"), false, true, true));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, PeriodFrequency.DAILY, false, true, true));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, 365, false, false, false));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, 366, false, false, false));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, SimpleFrequencyFactory.INSTANCE.getFrequency("Daily"), false, false, false));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, PeriodFrequency.DAILY, false, true, false));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, 365, false, false, true));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, 366, false, false, true));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, SimpleFrequencyFactory.INSTANCE.getFrequency("Daily"), false, false, true));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, PeriodFrequency.DAILY, false, true, true));
final ZonedDateTime[] schedule2 = ScheduleFactory.getSchedule(START2, END2, 365, false, true, false);
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, 366, false, true, false));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, SimpleFrequencyFactory.INSTANCE.getFrequency("Daily"), false, true, false));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, PeriodFrequency.DAILY, false, true, false));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, 365, false, true, true));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, 366, false, true, true));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, SimpleFrequencyFactory.INSTANCE.getFrequency("Daily"), false, true, true));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, PeriodFrequency.DAILY, false, true, true));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, 365, false, false, false));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, 366, false, false, false));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, SimpleFrequencyFactory.INSTANCE.getFrequency("Daily"), false, false, false));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, PeriodFrequency.DAILY, false, true, false));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, 365, false, false, true));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, 366, false, false, true));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, SimpleFrequencyFactory.INSTANCE.getFrequency("Daily"), false, false, true));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START2, END2, PeriodFrequency.DAILY, false, true, true));
assertEquals(schedule1.length, schedule2.length);
for (int i = 0; i < schedule1.length; i++) {
assertEquals(schedule1[i], schedule2[i].toLocalDate());
}
}
@Test
public void testWeeklyBackward() {
final LocalDate[] schedule1 = ScheduleFactory.getSchedule(START1, END1, 52, false, true, false);
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, SimpleFrequencyFactory.INSTANCE.getFrequency("Weekly"), false, true, false));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, PeriodFrequency.WEEKLY, false, true, false));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, 52, false, true, true));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, SimpleFrequencyFactory.INSTANCE.getFrequency("Weekly"), false, true, true));
assertArrayEquals(schedule1, ScheduleFactory.getSchedule(START1, END1, PeriodFrequency.WEEKLY, false, true, true));
final LocalDate[] schedule2 = ScheduleFactory.getSchedule(START1, END1, 52, false, false, false);
assertFalse(schedule1.equals(schedule2));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START1, END1, SimpleFrequencyFactory.INSTANCE.getFrequency("Weekly"), false, false, false));
assertArrayEquals(schedule2, ScheduleFactory.getSchedule(START1, END1, PeriodFrequency.WEEKLY, false, false, false));
final ZonedDateTime[] schedule3 = ScheduleFactory.getSchedule(START2, END2, 52, false, true, false);
assertArrayEquals(schedule3, ScheduleFactory.getSchedule(START2, END2, SimpleFrequencyFactory.INSTANCE.getFrequency("Weekly"), false, true, false));
assertArrayEquals(schedule3, ScheduleFactory.getSchedule(START2, END2, PeriodFrequency.WEEKLY, false, true, false));
final ZonedDateTime[] schedule4 = ScheduleFactory.getSchedule(START2, END2, 52, false, false, false);
assertFalse(schedule3.equals(schedule4));
assertArrayEquals(schedule4, ScheduleFactory.getSchedule(START2, END2, 52, false, false, false));
assertArrayEquals(schedule4, ScheduleFactory.getSchedule(START2, END2, SimpleFrequencyFactory.INSTANCE.getFrequency("Weekly"), false, false, false));
assertArrayEquals(schedule4, ScheduleFactory.getSchedule(START2, END2, PeriodFrequency.WEEKLY, false, false, false));
assertEquals(schedule1.length, schedule2.length);
for (int i = 0; i < schedule1.length; i++) {
assertEquals(schedule1[i], schedule3[i].toLocalDate());
}
}
}