Package com.opengamma.analytics.financial.timeseries.filter

Source Code of com.opengamma.analytics.financial.timeseries.filter.SpikeDoubleTimeSeriesFilterTest

/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.timeseries.filter;

import static org.testng.AssertJUnit.assertEquals;

import java.util.Arrays;

import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;

import cern.jet.random.engine.MersenneTwister;
import cern.jet.random.engine.MersenneTwister64;
import cern.jet.random.engine.RandomEngine;

import com.opengamma.timeseries.date.localdate.ImmutableLocalDateDoubleTimeSeries;
import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries;

/**
*
*/
public class SpikeDoubleTimeSeriesFilterTest {
  private static final RandomEngine RANDOM = new MersenneTwister64(MersenneTwister.DEFAULT_SEED);
  private static final TimeSeriesFilter FILTER = new SpikeDoubleTimeSeriesFilter(100);
  private static final int N = 100;
  private static final LocalDate[] DATES = new LocalDate[N];
  private static final double[] DATA = new double[N];
 
  private static final LocalDateDoubleTimeSeries EMPTY_SERIES = ImmutableLocalDateDoubleTimeSeries.EMPTY_SERIES;

  static {
    final double value = 0.5;
    double random;
    for (int i = 0; i < N; i++) {
      random = RANDOM.nextDouble();
      DATES[i] = LocalDate.ofEpochDay(i);
      DATA[i] = value * (random < 0.5 ? 1 - random : 1 + random);
    }
  }

  @Test(expectedExceptions = IllegalArgumentException.class)
  public void testNullTS() {
    FILTER.evaluate((LocalDateDoubleTimeSeries) null);
  }

  @Test
  public void testEmptyTS() {
    final FilteredTimeSeries filtered = FILTER.evaluate(EMPTY_SERIES);
    assertEquals(filtered.getFilteredTS(), EMPTY_SERIES);
    assertEquals(filtered.getRejectedTS(), EMPTY_SERIES);
  }

  @Test
  public void testInitialSpike() {
    final double[] data = Arrays.copyOf(DATA, N);
    data[0] = 100.;
    final LocalDateDoubleTimeSeries ts = ImmutableLocalDateDoubleTimeSeries.of(DATES, data);
    final LocalDateDoubleTimeSeries rejected = FILTER.evaluate(ts).getRejectedTS();
    assertEquals(rejected.size(), 1);
    assertEquals(rejected.getTimeAtIndex(0), ts.getTimeAtIndex(0));
    assertEquals(rejected.getValueAtIndex(0), ts.getValueAtIndex(0));
  }

  @Test
  public void testSpike() {
    final double[] data = Arrays.copyOf(DATA, N);
    data[10] = 100.;
    LocalDateDoubleTimeSeries ts = ImmutableLocalDateDoubleTimeSeries.of(DATES, data);
    FilteredTimeSeries filtered = FILTER.evaluate(ts);
    assertSeries(ts, filtered, 10);
    data[10] = -100.;
    ts = ImmutableLocalDateDoubleTimeSeries.of(DATES, data);
    filtered = FILTER.evaluate(ts);
    assertSeries(ts, filtered, 10);
  }

  private void assertSeries(final LocalDateDoubleTimeSeries ts, final FilteredTimeSeries filtered, final int index) {
    final LocalDateDoubleTimeSeries rejected = filtered.getRejectedTS();
    assertEquals(rejected.size(), 1);
    assertEquals(rejected.getTimeAtIndex(0), ts.getTimeAtIndex(index));
    assertEquals(rejected.getValueAtIndex(0), ts.getValueAtIndex(index));
    assertEquals(filtered.getFilteredTS().size(), 99);
  }
}
TOP

Related Classes of com.opengamma.analytics.financial.timeseries.filter.SpikeDoubleTimeSeriesFilterTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.