/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.convention; import static org.testng.AssertJUnit.assertEquals; import java.util.Arrays; import org.testng.annotations.Test; import org.threeten.bp.LocalDate; import org.threeten.bp.ZonedDateTime; import com.opengamma.util.test.TestGroup; import com.opengamma.util.time.DateUtils; /** * Test StubCalculator. */ @Test(groups = TestGroup.UNIT) public class StubCalculatorTest { // StubCalculator used to accept ZDT, so tests were written that way private static final ZonedDateTime[] NO_STUB1 = new ZonedDateTime[] {DateUtils.getUTCDate(2008, 1, 1), DateUtils.getUTCDate(2008, 4, 1), DateUtils.getUTCDate(2008, 7, 1), DateUtils.getUTCDate(2008, 10, 1), DateUtils.getUTCDate(2009, 1, 1), DateUtils.getUTCDate(2009, 4, 1), DateUtils.getUTCDate(2009, 7, 1), DateUtils.getUTCDate(2009, 10, 1), DateUtils.getUTCDate(2010, 1, 1), DateUtils.getUTCDate(2010, 4, 1), DateUtils.getUTCDate(2010, 7, 1), DateUtils.getUTCDate(2010, 10, 1), DateUtils.getUTCDate(2011, 1, 1), DateUtils.getUTCDate(2011, 4, 1), DateUtils.getUTCDate(2011, 7, 1), DateUtils.getUTCDate(2011, 10, 1)}; private static final ZonedDateTime[] SHORT_START_STUB1; private static final ZonedDateTime[] LONG_START_STUB1; private static final ZonedDateTime[] SHORT_END_STUB1; private static final ZonedDateTime[] LONG_END_STUB1; private static final LocalDate[] NO_STUB2; private static final LocalDate[] SHORT_START_STUB2; private static final LocalDate[] LONG_START_STUB2; private static final LocalDate[] SHORT_END_STUB2; private static final LocalDate[] LONG_END_STUB2; private static final ZonedDateTime[] NO_STUB3 = new ZonedDateTime[] {DateUtils.getUTCDate(2008, 1, 31), DateUtils.getUTCDate(2008, 4, 30), DateUtils.getUTCDate(2008, 7, 31), DateUtils.getUTCDate(2008, 10, 31), DateUtils.getUTCDate(2009, 1, 31), DateUtils.getUTCDate(2009, 4, 30), DateUtils.getUTCDate(2009, 7, 31), DateUtils.getUTCDate(2009, 10, 31), DateUtils.getUTCDate(2010, 1, 31), DateUtils.getUTCDate(2010, 4, 30), DateUtils.getUTCDate(2010, 7, 31), DateUtils.getUTCDate(2010, 10, 31), DateUtils.getUTCDate(2011, 1, 31), DateUtils.getUTCDate(2011, 4, 30), DateUtils.getUTCDate(2011, 7, 31), DateUtils.getUTCDate(2011, 10, 31)}; private static final ZonedDateTime[] SHORT_START_STUB3; private static final ZonedDateTime[] LONG_START_STUB3; private static final ZonedDateTime[] SHORT_END_STUB3; private static final ZonedDateTime[] LONG_END_STUB3; private static final LocalDate[] NO_STUB4; private static final LocalDate[] SHORT_START_STUB4; private static final LocalDate[] LONG_START_STUB4; private static final LocalDate[] SHORT_END_STUB4; private static final LocalDate[] LONG_END_STUB4; static { final int n = NO_STUB1.length; SHORT_START_STUB1 = Arrays.copyOf(NO_STUB1, n); LONG_START_STUB1 = Arrays.copyOf(NO_STUB1, n); SHORT_END_STUB1 = Arrays.copyOf(NO_STUB1, n); LONG_END_STUB1 = Arrays.copyOf(NO_STUB1, n); SHORT_START_STUB3 = Arrays.copyOf(NO_STUB3, n); LONG_START_STUB3 = Arrays.copyOf(NO_STUB3, n); SHORT_END_STUB3 = Arrays.copyOf(NO_STUB3, n); LONG_END_STUB3 = Arrays.copyOf(NO_STUB3, n); SHORT_START_STUB1[0] = DateUtils.getUTCDate(2008, 1, 30); LONG_START_STUB1[0] = DateUtils.getUTCDate(2007, 12, 1); SHORT_END_STUB1[n - 1] = DateUtils.getUTCDate(2011, 9, 4); LONG_END_STUB1[n - 1] = DateUtils.getUTCDate(2011, 11, 3); SHORT_START_STUB3[0] = DateUtils.getUTCDate(2008, 2, 27); LONG_START_STUB3[0] = DateUtils.getUTCDate(2008, 1, 27); SHORT_END_STUB3[n - 1] = DateUtils.getUTCDate(2011, 9, 4); LONG_END_STUB3[n - 1] = DateUtils.getUTCDate(2011, 11, 4); NO_STUB2 = new LocalDate[n]; SHORT_START_STUB2 = new LocalDate[n]; LONG_START_STUB2 = new LocalDate[n]; SHORT_END_STUB2 = new LocalDate[n]; LONG_END_STUB2 = new LocalDate[n]; NO_STUB4 = new LocalDate[n]; SHORT_START_STUB4 = new LocalDate[n]; LONG_START_STUB4 = new LocalDate[n]; SHORT_END_STUB4 = new LocalDate[n]; LONG_END_STUB4 = new LocalDate[n]; for (int i = 0; i < n; i++) { NO_STUB2[i] = NO_STUB1[i].toLocalDate(); SHORT_START_STUB4[i] = SHORT_START_STUB3[i].toLocalDate(); LONG_START_STUB4[i] = LONG_START_STUB3[i].toLocalDate(); SHORT_END_STUB4[i] = SHORT_END_STUB3[i].toLocalDate(); LONG_END_STUB4[i] = LONG_END_STUB3[i].toLocalDate(); NO_STUB4[i] = NO_STUB3[i].toLocalDate(); SHORT_START_STUB2[i] = SHORT_START_STUB1[i].toLocalDate(); LONG_START_STUB2[i] = LONG_START_STUB1[i].toLocalDate(); SHORT_END_STUB2[i] = SHORT_END_STUB1[i].toLocalDate(); LONG_END_STUB2[i] = LONG_END_STUB1[i].toLocalDate(); } } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullSchedule1() { StubCalculator.getStartStubType((LocalDate[]) null, 1); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullSchedule3() { StubCalculator.getEndStubType((LocalDate[]) null, 1); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullInSchedule1() { StubCalculator.getStartStubType(new LocalDate[] {null, null}, 1); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullInSchedule3() { StubCalculator.getEndStubType(new LocalDate[] {null, null}, 1); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNegativePayments2() { StubCalculator.getStartStubType(NO_STUB2, -1); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNegativePayments4() { StubCalculator.getEndStubType(NO_STUB2, -1); } @Test(expectedExceptions = IllegalArgumentException.class) public void testBadPayments2() { StubCalculator.getStartStubType(NO_STUB2, 5); } @Test(expectedExceptions = IllegalArgumentException.class) public void testBadPayments4() { StubCalculator.getEndStubType(NO_STUB2, 5); } @Test public void testStartType() { assertEquals(StubCalculator.getStartStubType(NO_STUB2, 4), StubType.NONE); assertEquals(StubCalculator.getStartStubType(SHORT_START_STUB2, 4), StubType.SHORT_START); assertEquals(StubCalculator.getStartStubType(LONG_START_STUB2, 4), StubType.LONG_START); assertEquals(StubCalculator.getStartStubType(SHORT_END_STUB2, 4), StubType.NONE); assertEquals(StubCalculator.getStartStubType(LONG_END_STUB2, 4), StubType.NONE); assertEquals(StubCalculator.getStartStubType(NO_STUB4, 4), StubType.SHORT_START); assertEquals(StubCalculator.getStartStubType(SHORT_START_STUB4, 4), StubType.SHORT_START); assertEquals(StubCalculator.getStartStubType(LONG_START_STUB4, 4), StubType.LONG_START); assertEquals(StubCalculator.getStartStubType(SHORT_END_STUB4, 4), StubType.SHORT_START); assertEquals(StubCalculator.getStartStubType(LONG_END_STUB4, 4), StubType.SHORT_START); assertEquals(StubCalculator.getStartStubType(NO_STUB4, 4, true), StubType.NONE); assertEquals(StubCalculator.getStartStubType(SHORT_START_STUB4, 4, true), StubType.SHORT_START); assertEquals(StubCalculator.getStartStubType(LONG_START_STUB4, 4, true), StubType.LONG_START); assertEquals(StubCalculator.getStartStubType(SHORT_END_STUB4, 4, true), StubType.NONE); assertEquals(StubCalculator.getStartStubType(LONG_END_STUB4, 4, true), StubType.NONE); } @Test public void testEndType() { assertEquals(StubCalculator.getEndStubType(NO_STUB2, 4), StubType.NONE); assertEquals(StubCalculator.getEndStubType(SHORT_START_STUB2, 4), StubType.NONE); assertEquals(StubCalculator.getEndStubType(LONG_START_STUB2, 4), StubType.NONE); assertEquals(StubCalculator.getEndStubType(SHORT_END_STUB2, 4), StubType.SHORT_END); assertEquals(StubCalculator.getEndStubType(LONG_END_STUB2, 4), StubType.LONG_END); assertEquals(StubCalculator.getEndStubType(NO_STUB4, 4), StubType.NONE); assertEquals(StubCalculator.getEndStubType(SHORT_START_STUB4, 4), StubType.NONE); assertEquals(StubCalculator.getEndStubType(LONG_START_STUB4, 4), StubType.NONE); assertEquals(StubCalculator.getEndStubType(SHORT_END_STUB4, 4), StubType.SHORT_END); assertEquals(StubCalculator.getEndStubType(LONG_END_STUB4, 4), StubType.LONG_END); assertEquals(StubCalculator.getEndStubType(NO_STUB4, 4, true), StubType.NONE); assertEquals(StubCalculator.getEndStubType(SHORT_START_STUB4, 4, true), StubType.NONE); assertEquals(StubCalculator.getEndStubType(LONG_START_STUB4, 4, true), StubType.NONE); assertEquals(StubCalculator.getEndStubType(SHORT_END_STUB4, 4, true), StubType.SHORT_END); assertEquals(StubCalculator.getEndStubType(LONG_END_STUB4, 4, true), StubType.LONG_END); } }