/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.convention.rolldate; import static org.testng.AssertJUnit.assertEquals; import org.testng.annotations.Test; import org.threeten.bp.LocalDate; import org.threeten.bp.temporal.TemporalAdjuster; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class GeneralRollDateAdjusterTest { private static final TemporalAdjuster ADJUSTER_MONTHLY = MonthlyIMMRollDateAdjuster.getAdjuster(); private static final TemporalAdjuster ADJUSTER_QUARTERLY = QuarterlyIMMRollDateAdjuster.getAdjuster(); private static final TemporalAdjuster ROLL_DATE_ADJUSTER_MONTHLY = new GeneralRollDateAdjuster(1, ADJUSTER_MONTHLY); private static final TemporalAdjuster ROLL_DATE_ADJUSTER_QUARTERLY = new GeneralRollDateAdjuster(1, ADJUSTER_QUARTERLY); @Test public void testFirstQuarter() { LocalDate date = LocalDate.of(2013, 1, 1); final LocalDate immDate = LocalDate.of(2013, 3, 20); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_QUARTERLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testSecondQuarter() { LocalDate date = LocalDate.of(2013, 3, 21); final LocalDate immDate = LocalDate.of(2013, 6, 19); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_QUARTERLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testThirdQuarterBefore() { LocalDate date = LocalDate.of(2013, 6, 20); final LocalDate immDate = LocalDate.of(2013, 9, 18); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_QUARTERLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testFourthQuarter() { LocalDate date = LocalDate.of(2013, 9, 19); final LocalDate immDate = LocalDate.of(2013, 12, 18); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_QUARTERLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testYearEnd() { LocalDate date = LocalDate.of(2013, 12, 19); final LocalDate endOfYear = LocalDate.of(2013, 12, 31); final LocalDate immDate = LocalDate.of(2014, 3, 19); while (!date.isAfter(endOfYear)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_QUARTERLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testFirstMonth() { LocalDate date = LocalDate.of(2013, 1, 1); final LocalDate immDate = LocalDate.of(2013, 1, 16); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_MONTHLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testSecondMonth() { LocalDate date = LocalDate.of(2013, 1, 17); final LocalDate immDate = LocalDate.of(2013, 2, 20); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_MONTHLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testThirdMonth() { LocalDate date = LocalDate.of(2013, 2, 21); final LocalDate immDate = LocalDate.of(2013, 3, 20); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_MONTHLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testFourthMonth() { LocalDate date = LocalDate.of(2013, 3, 21); final LocalDate immDate = LocalDate.of(2013, 4, 17); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_MONTHLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testFifthMonth() { LocalDate date = LocalDate.of(2013, 4, 18); final LocalDate immDate = LocalDate.of(2013, 5, 15); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_MONTHLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testSixthMonth() { LocalDate date = LocalDate.of(2013, 5, 16); final LocalDate immDate = LocalDate.of(2013, 6, 19); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_MONTHLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testSeventhMonth() { LocalDate date = LocalDate.of(2013, 6, 20); final LocalDate immDate = LocalDate.of(2013, 7, 17); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_MONTHLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testEighthMonth() { LocalDate date = LocalDate.of(2013, 7, 18); final LocalDate immDate = LocalDate.of(2013, 8, 21); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_MONTHLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testNinthMonth() { LocalDate date = LocalDate.of(2013, 8, 22); final LocalDate immDate = LocalDate.of(2013, 9, 18); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_MONTHLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testTenthMonth() { LocalDate date = LocalDate.of(2013, 9, 19); final LocalDate immDate = LocalDate.of(2013, 10, 16); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_MONTHLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testEleventhMonth() { LocalDate date = LocalDate.of(2013, 10, 17); final LocalDate immDate = LocalDate.of(2013, 11, 20); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_MONTHLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testTwelfthMonth() { LocalDate date = LocalDate.of(2013, 11, 21); final LocalDate immDate = LocalDate.of(2013, 12, 18); while (!date.isAfter(immDate)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_MONTHLY.adjustInto(date)); date = date.plusDays(1); } } @Test public void testYearEndMonthly() { LocalDate date = LocalDate.of(2013, 12, 19); final LocalDate endOfYear = LocalDate.of(2013, 12, 31); final LocalDate immDate = LocalDate.of(2014, 1, 15); while (!date.isAfter(endOfYear)) { assertEquals(immDate, ROLL_DATE_ADJUSTER_MONTHLY.adjustInto(date)); date = date.plusDays(1); } } }