/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.instrument; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertTrue; import java.util.ArrayList; import org.testng.annotations.Test; import org.threeten.bp.LocalDate; import org.threeten.bp.LocalTime; import org.threeten.bp.Period; import org.threeten.bp.ZoneId; import org.threeten.bp.ZoneOffset; import org.threeten.bp.ZonedDateTime; import com.opengamma.util.test.TestGroup; /** * Test {@link VariableNotionalProvider} */ @SuppressWarnings("unused") @Test(groups = TestGroup.UNIT) public class VariableNotionalProviderTest { /** * Test methods and private variables */ @Test public void generalTest() { /* * With dates */ LocalDate baseDate = LocalDate.of(2014, 7, 18); double baseNotional = 1.0e6; Period period = Period.ofMonths(3); LocalDate[] dates = new LocalDate[] {baseDate, baseDate.plus(period), baseDate.plus(period.multipliedBy(2)), baseDate.plus(period.multipliedBy(3)), baseDate.plus(period.multipliedBy(4)) }; int nDates = dates.length; double[] notionals = new double[] {baseNotional, baseNotional * 0.9, baseNotional * 0.8, baseNotional * 0.7, baseNotional * 0.6 }; VariableNotionalProvider provider = new VariableNotionalProvider(dates, notionals); LocalDate[] datesRes = provider.getDates(); double[] notionalsRes = provider.getNotionals(); assertEquals(nDates, datesRes.length); assertEquals(nDates, notionalsRes.length); for (int i = 0; i < nDates; ++i) { assertEquals(notionals[i], notionalsRes[i], baseNotional * 1.0e-12); assertEquals(dates[i], datesRes[i]); assertEquals(notionals[i], provider.getAmount(dates[i]), baseNotional * 1.0e-12); } /* * Without dates */ VariableNotionalProvider provider1 = new VariableNotionalProvider(notionals); assertTrue(provider1.getDates() == null); for (int i = 0; i < nDates; ++i) { assertEquals(notionals[i], provider1.getNotionals()[i], baseNotional * 1.0e-12); } ArrayList<ZonedDateTime> list = new ArrayList<>(); for (int i = 0; i < nDates; ++i) { list.add(dates[i].atTime(LocalTime.MIN).atZone(ZoneOffset.UTC)); } VariableNotionalProvider provider2 = provider1.withZonedDateTime(list); for (int i = 0; i < nDates; ++i) { assertEquals(dates[i], provider2.getDates()[i]); assertEquals(notionals[i], provider2.getAmount(dates[i]), baseNotional * 1.0e-12); } } /** * */ @Test(expectedExceptions = IllegalArgumentException.class) public void wrongDateSet() { double[] notionals = new double[] {100.0, 90.0 }; ArrayList<ZonedDateTime> list = new ArrayList<>(); list.add(ZonedDateTime.of(2014, 7, 21, 0, 0, 0, 0, ZoneId.of("UTC"))); VariableNotionalProvider provider = new VariableNotionalProvider(notionals); provider.withZonedDateTime(list); } /** * data is null */ @Test(expectedExceptions = IllegalArgumentException.class) public void missingDateSetTest() { double[] notionals = new double[] {100.0, 90.0 }; VariableNotionalProvider provider = new VariableNotionalProvider(notionals); provider.getAmount(LocalDate.of(2014, 11, 13)); } /** * date is empty */ @Test(expectedExceptions = IllegalArgumentException.class) public void emptyDateTest() { LocalDate[] dates = new LocalDate[] {}; double[] notionals = new double[] {100.0 }; new VariableNotionalProvider(dates, notionals); } /** * notional is empty */ @Test(expectedExceptions = IllegalArgumentException.class) public void emptyNotionalTest() { LocalDate[] dates = new LocalDate[] {LocalDate.of(2014, 7, 18) }; double[] notionals = new double[] {}; new VariableNotionalProvider(dates, notionals); } /** * notionals and dates, different lengths */ @Test(expectedExceptions = IllegalArgumentException.class) public void notSameLengthTest() { LocalDate[] dates = new LocalDate[] {LocalDate.of(2014, 7, 18) }; double[] notionals = new double[] {100.0, 200.0 }; new VariableNotionalProvider(dates, notionals); } /** * date is not found */ @Test(expectedExceptions = IllegalArgumentException.class) public void dateNotFoundTest() { LocalDate[] dates = new LocalDate[] {LocalDate.of(2014, 7, 18), LocalDate.of(2014, 9, 18) }; double[] notionals = new double[] {100.0, 200.0 }; VariableNotionalProvider provider = new VariableNotionalProvider(dates, notionals); provider.getAmount(LocalDate.of(2014, 8, 1)); } }