/** * Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.timeseries.util; import static org.testng.AssertJUnit.assertEquals; import org.testng.annotations.Test; import org.threeten.bp.LocalDate; import com.opengamma.timeseries.date.DateDoubleTimeSeries; import com.opengamma.timeseries.date.localdate.ImmutableLocalDateDoubleTimeSeries; import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries; /** * Tests {@link TimeSeriesDifferenceOperator} */ public class TimeSeriesDifferenceOperatorTest { private static final LocalDateDoubleTimeSeries TS_1 = TimeSeriesDataSet.timeSeriesGbpLibor3M2014Jan(LocalDate.of(2014, 2, 1)); private static final int NB_DATA_1 = TS_1.size(); private static final TimeSeriesDifferenceOperator OP_DIF_1 = new TimeSeriesDifferenceOperator(); private static final TimeSeriesDifferenceOperator OP_DIF_2 = new TimeSeriesDifferenceOperator(2); private static final double TOLERANCE_DIFF = 1.0E-10; @Test(expectedExceptions = IllegalArgumentException.class) public void nullTsException() { OP_DIF_1.evaluate((LocalDateDoubleTimeSeries) null); } @Test(expectedExceptions = IllegalArgumentException.class) public void tooShortTimeSeriesException() { LocalDateDoubleTimeSeries tooShortTs = ImmutableLocalDateDoubleTimeSeries.of( new LocalDate[] {LocalDate.of(2014, 1, 2)}, new Double[] {1.0}); OP_DIF_1.evaluate(tooShortTs); } /** * Test the difference operator for a standard lag of 1 element. */ @Test public void difference1() { DateDoubleTimeSeries<?> tsDiff1 = OP_DIF_1.evaluate(TS_1); assertEquals(NB_DATA_1 - 1, tsDiff1.size()); for (int i = 1; i < NB_DATA_1; i++) { LocalDate dateTs = TS_1.getTimeAtIndex(i); LocalDate dateDiff = (LocalDate) tsDiff1.getTimeAtIndex(i - 1); assertEquals(dateTs, dateDiff); double diffComputed = tsDiff1.getValueAtIndex(i - 1); double diffExpected = TS_1.getValueAtIndex(i) - TS_1.getValueAtIndex(i - 1); assertEquals(diffExpected, diffComputed, TOLERANCE_DIFF); } } /** Tests the difference operator for a lag of 2 elements. */ @Test public void difference2() { DateDoubleTimeSeries<?> tsDiff = OP_DIF_2.evaluate(TS_1); assertEquals(NB_DATA_1 - 2, tsDiff.size()); for (int i = 2; i < NB_DATA_1; i++) { LocalDate dateTs = TS_1.getTimeAtIndex(i); LocalDate dateDiff = (LocalDate) tsDiff.getTimeAtIndex(i - 2); assertEquals(dateTs, dateDiff); double diffComputed = tsDiff.getValueAtIndex(i - 2); double diffExpected = TS_1.getValueAtIndex(i) - TS_1.getValueAtIndex(i - 2); assertEquals(diffExpected, diffComputed, TOLERANCE_DIFF); } } }