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

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

/**
* 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 org.testng.annotations.Test;
import org.threeten.bp.LocalDate;

import cern.colt.Arrays;
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 ZeroValueDoubleTimeSeriesFilterTest {
  private static final RandomEngine RANDOM = new MersenneTwister64(MersenneTwister.DEFAULT_SEED);
  private static final ZeroValueDoubleTimeSeriesFilter SMALL_ZERO_FILTER = new ZeroValueDoubleTimeSeriesFilter();
  private static final ZeroValueDoubleTimeSeriesFilter LARGE_ZERO_FILTER = new ZeroValueDoubleTimeSeriesFilter(1e-3);
  private static final LocalDateDoubleTimeSeries EMPTY_SERIES = ImmutableLocalDateDoubleTimeSeries.EMPTY_SERIES;

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

  @Test(expectedExceptions = IllegalArgumentException.class)
  public void testNegativeZero() {
    new ZeroValueDoubleTimeSeriesFilter(-1e-12);
  }

  @Test(expectedExceptions = IllegalArgumentException.class)
  public void testSetNegativeZero() {
    SMALL_ZERO_FILTER.setZero(-1e-12);
  }

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

  @Test
  public void test() {
    final int n = 100;
    final LocalDate[] dates = new LocalDate[n];
    final double[] data = new double[n];
    LocalDate[] smallZeroFilteredDates = new LocalDate[n];
    double[] smallZeroFilteredData = new double[n];
    LocalDate[] smallZeroRejectedDates = new LocalDate[n];
    double[] smallZeroRejectedData = new double[n];
    LocalDate[] largeZeroFilteredDates = new LocalDate[n];
    double[] largeZeroFilteredData = new double[n];
    LocalDate[] largeZeroRejectedDates = new LocalDate[n];
    double[] largeZeroRejectedData = new double[n];
    double d;
    final Double smallValue = 1e-4;
    int h, j = 0, k = 0, l = 0, m = 0;
    for (int i = 0; i < 100; i++) {
      d = RANDOM.nextDouble();
      h = i + 1;
      dates[i] = LocalDate.ofEpochDay(h);
      if (d < 0.3) {
        if (d > 0.25) {
          data[i] = smallValue;
          largeZeroRejectedDates[j] = LocalDate.ofEpochDay(h);
          largeZeroRejectedData[j++] = smallValue;
          smallZeroFilteredDates[k] = LocalDate.ofEpochDay(h);
          smallZeroFilteredData[k++] = smallValue;
        } else {
          data[i] = 0;
          largeZeroRejectedDates[j] = LocalDate.ofEpochDay(h);
          largeZeroRejectedData[j++] = 0;
          smallZeroRejectedDates[l] = LocalDate.ofEpochDay(h);
          smallZeroRejectedData[l++] = 0;
        }
      } else {
        data[i] = d;
        smallZeroFilteredDates[k] = LocalDate.ofEpochDay(h);
        smallZeroFilteredData[k++] = d;
        largeZeroFilteredDates[m] = LocalDate.ofEpochDay(h);
        largeZeroFilteredData[m++] = d;
      }
    }
    smallZeroFilteredDates = trimToCapacity(smallZeroFilteredDates, k);
    smallZeroFilteredData = Arrays.trimToCapacity(smallZeroFilteredData, k);
    smallZeroRejectedDates = trimToCapacity(smallZeroRejectedDates, l);
    smallZeroRejectedData = Arrays.trimToCapacity(smallZeroRejectedData, l);
    largeZeroFilteredDates = trimToCapacity(largeZeroFilteredDates, m);
    largeZeroFilteredData = Arrays.trimToCapacity(largeZeroFilteredData, m);
    largeZeroRejectedDates = trimToCapacity(largeZeroRejectedDates, j);
    largeZeroRejectedData = Arrays.trimToCapacity(largeZeroRejectedData, j);
    final LocalDateDoubleTimeSeries ts = ImmutableLocalDateDoubleTimeSeries.of(dates, data);
    FilteredTimeSeries result = SMALL_ZERO_FILTER.evaluate(ts);
    assertEquals(result, new FilteredTimeSeries(ImmutableLocalDateDoubleTimeSeries.of(smallZeroFilteredDates, smallZeroFilteredData),
        ImmutableLocalDateDoubleTimeSeries.of(smallZeroRejectedDates, smallZeroRejectedData)));
    result = LARGE_ZERO_FILTER.evaluate(ts);
    assertEquals(result, new FilteredTimeSeries(ImmutableLocalDateDoubleTimeSeries.of(largeZeroFilteredDates, largeZeroFilteredData),
        ImmutableLocalDateDoubleTimeSeries.of(largeZeroRejectedDates, largeZeroRejectedData)));
  }

  private LocalDate[] trimToCapacity(final LocalDate[] source, final int k) {
    final LocalDate[] result = new LocalDate[k];
    System.arraycopy(source, 0, result, 0, k);
    return result;
  }
}
TOP

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

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.