// ------------------------------------------------------------------------- public void test_forEach() { LocalDateDoubleTimeSeries base = LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_14, VALUES_10_14).build(); AtomicInteger counter = new AtomicInteger(); base.forEach((date, value) -> counter.addAndGet((int) value)); assertEquals(counter.get(), 10 + 11 + 12 + 13 + 14); }
public void test_equals_notEqual() { LocalDateDoubleTimeSeries series1 = LocalDateDoubleTimeSeries.of(DATE_2014_01_01, 1d); LocalDateDoubleTimeSeries series2 = LocalDateDoubleTimeSeries.of(DATE_2013_06_01, 1d); LocalDateDoubleTimeSeries series3 = LocalDateDoubleTimeSeries.of(DATE_2014_01_01, 3d); assertNotEquals(series1, series2); assertNotEquals(series1, series3); }
// ------------------------------------------------------------------------- public void test_dateStream() { LocalDateDoubleTimeSeries base = LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_12, VALUES_10_12).build(); LocalDate[] test = base.dates().toArray(LocalDate[]::new); assertEquals(test[0], DATE_2010_01_01); assertEquals(test[1], DATE_2011_01_01); assertEquals(test[2], DATE_2012_01_01); }
public void test_valueStream() { LocalDateDoubleTimeSeries base = LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_12, VALUES_10_12).build(); double[] test = base.values().toArray(); assertEquals(test[0], 10, TOLERANCE); assertEquals(test[1], 11, TOLERANCE); assertEquals(test[2], 12, TOLERANCE); }
// ------------------------------------------------------------------------- public void test_mapValues_addConstantToSeries() { LocalDateDoubleTimeSeries base = LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_14, VALUES_10_14).build(); LocalDateDoubleTimeSeries test = base.mapValues(d -> d + 5); List<Double> expectedValues = values(15, 16, 17, 18, 19); assertEquals( test, LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_14, expectedValues).build()); }
// ------------------------------------------------------------------------- public void test_stream() { LocalDateDoubleTimeSeries base = LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_12, VALUES_10_12).build(); Object[] test = base.stream().toArray(); assertEquals(test[0], LocalDateDoublePoint.of(DATE_2010_01_01, 10)); assertEquals(test[1], LocalDateDoublePoint.of(DATE_2011_01_01, 11)); assertEquals(test[2], LocalDateDoublePoint.of(DATE_2012_01_01, 12)); }
public void test_mapValues_multiplySeries() { LocalDateDoubleTimeSeries base = LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_14, VALUES_10_14).build(); LocalDateDoubleTimeSeries test = base.mapValues(d -> d * 5); List<Double> expectedValues = values(50, 55, 60, 65, 70); assertEquals( test, LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_14, expectedValues).build()); }
public void test_mapValues_invertSeries() { List<Double> values = values(1, 2, 4, 5, 8); LocalDateDoubleTimeSeries base = LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_14, values).build(); LocalDateDoubleTimeSeries test = base.mapValues(d -> 1 / d); List<Double> expectedValues = values(1, 0.5, 0.25, 0.2, 0.125); assertEquals( test, LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_14, expectedValues).build()); }
public void test_immutableValuesViaBeanGet() { LocalDateDoubleTimeSeries test = LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_12, VALUES_10_12).build(); double[] array = (double[]) ((Bean) test).property("values").get(); array[0] = -1; LocalDateDoublePoint[] points = test.stream().toArray(LocalDateDoublePoint[]::new); assertEquals(points[0], LocalDateDoublePoint.of(DATE_2010_01_01, 10d)); assertEquals(points[1], LocalDateDoublePoint.of(DATE_2011_01_01, 11d)); assertEquals(points[2], LocalDateDoublePoint.of(DATE_2012_01_01, 12d)); }
// ------------------------------------------------------------------------- public void test_combineWith_intersectionWithNoMatchingElements() { LocalDateDoubleTimeSeries series1 = LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_14, VALUES_10_14).build(); List<LocalDate> dates2 = dates(DATE_2010_06_01, DATE_2011_06_01, DATE_2012_06_01, DATE_2013_06_01, DATE_2014_06_01); LocalDateDoubleTimeSeries series2 = LocalDateDoubleTimeSeries.builder().putAll(dates2, VALUES_10_14).build(); LocalDateDoubleTimeSeries test = series1.intersection(series2, Double::sum); assertEquals(test, LocalDateDoubleTimeSeries.empty()); }
// ------------------------------------------------------------------------- public void test_of_singleton() { LocalDateDoubleTimeSeries test = LocalDateDoubleTimeSeries.of(DATE_2011_01_01, 2d); assertEquals(test.isEmpty(), false); assertEquals(test.size(), 1); assertEquals(test.containsDate(DATE_2010_01_01), false); assertEquals(test.containsDate(DATE_2011_01_01), true); assertEquals(test.containsDate(DATE_2012_01_01), false); assertEquals(test.get(DATE_2010_01_01), OptionalDouble.empty()); assertEquals(test.get(DATE_2011_01_01), OptionalDouble.of(2d)); assertEquals(test.get(DATE_2012_01_01), OptionalDouble.empty()); assertEquals(test.dates().toArray(), new Object[] {DATE_2011_01_01}); assertEquals(test.values().toArray(), new double[] {2d}); }
// ------------------------------------------------------------------------- public void test_immutableViaBeanBuilder() { LocalDate[] dates = {DATE_2010_01_01, DATE_2011_01_01, DATE_2012_01_01}; double[] values = {6, 5, 4}; BeanBuilder<? extends LocalDateDoubleTimeSeries> builder = SparseLocalDateDoubleTimeSeries.meta().builder(); builder.set("dates", dates); builder.set("values", values); LocalDateDoubleTimeSeries test = builder.build(); dates[0] = DATE_2012_01_01; values[0] = -1; LocalDateDoublePoint[] points = test.stream().toArray(LocalDateDoublePoint[]::new); assertEquals(points[0], LocalDateDoublePoint.of(DATE_2010_01_01, 6d)); assertEquals(points[1], LocalDateDoublePoint.of(DATE_2011_01_01, 5d)); assertEquals(points[2], LocalDateDoublePoint.of(DATE_2012_01_01, 4d)); }
// ------------------------------------------------------------------------- public void test_of_map() { Map<LocalDate, Double> map = new HashMap<>(); map.put(DATE_2011_01_01, 2d); map.put(DATE_2012_01_01, 3d); LocalDateDoubleTimeSeries test = LocalDateDoubleTimeSeries.builder().putAll(map).build(); assertEquals(test.isEmpty(), false); assertEquals(test.size(), 2); assertEquals(test.containsDate(DATE_2010_01_01), false); assertEquals(test.containsDate(DATE_2011_01_01), true); assertEquals(test.containsDate(DATE_2012_01_01), true); assertEquals(test.get(DATE_2010_01_01), OptionalDouble.empty()); assertEquals(test.get(DATE_2011_01_01), OptionalDouble.of(2d)); assertEquals(test.get(DATE_2012_01_01), OptionalDouble.of(3d)); assertEquals(test.dates().toArray(), new Object[] {DATE_2011_01_01, DATE_2012_01_01}); assertEquals(test.values().toArray(), new double[] {2d, 3d}); }
public void test_of_collection_collectionNull() { assertThrowsIllegalArg( () -> LocalDateDoubleTimeSeries.builder() .putAll(((List<LocalDateDoublePoint>) null)) .build()); }
// ------------------------------------------------------------------------- public void test_of_collectionCollection() { Collection<LocalDate> dates = dates(DATE_2011_01_01, DATE_2012_01_01); Collection<Double> values = values(2d, 3d); LocalDateDoubleTimeSeries test = LocalDateDoubleTimeSeries.builder().putAll(dates, values).build(); assertEquals(test.isEmpty(), false); assertEquals(test.size(), 2); assertEquals(test.containsDate(DATE_2010_01_01), false); assertEquals(test.containsDate(DATE_2011_01_01), true); assertEquals(test.containsDate(DATE_2012_01_01), true); assertEquals(test.get(DATE_2010_01_01), OptionalDouble.empty()); assertEquals(test.get(DATE_2011_01_01), OptionalDouble.of(2d)); assertEquals(test.get(DATE_2012_01_01), OptionalDouble.of(3d)); assertEquals(test.dates().toArray(), new Object[] {DATE_2011_01_01, DATE_2012_01_01}); assertEquals(test.values().toArray(), new double[] {2d, 3d}); }
public void test_of_collectionCollection_dateCollectionNull() { Collection<Double> values = values(2d, 3d); assertThrowsIllegalArg( () -> LocalDateDoubleTimeSeries.builder() .putAll((Collection<LocalDate>) null, values) .build()); }
// ------------------------------------------------------------------------- public void test_of_collection() { Collection<LocalDateDoublePoint> points = Arrays.asList( LocalDateDoublePoint.of(DATE_2011_01_01, 2d), LocalDateDoublePoint.of(DATE_2012_01_01, 3d)); LocalDateDoubleTimeSeries test = LocalDateDoubleTimeSeries.builder().putAll(points.stream()).build(); assertEquals(test.isEmpty(), false); assertEquals(test.size(), 2); assertEquals(test.containsDate(DATE_2010_01_01), false); assertEquals(test.containsDate(DATE_2011_01_01), true); assertEquals(test.containsDate(DATE_2012_01_01), true); assertEquals(test.get(DATE_2010_01_01), OptionalDouble.empty()); assertEquals(test.get(DATE_2011_01_01), OptionalDouble.of(2d)); assertEquals(test.get(DATE_2012_01_01), OptionalDouble.of(3d)); assertEquals(test.dates().toArray(), new Object[] {DATE_2011_01_01, DATE_2012_01_01}); assertEquals(test.values().toArray(), new double[] {2d, 3d}); }
public void test_stream_withCollector() { LocalDateDoubleTimeSeries base = LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_12, VALUES_10_12).build(); LocalDateDoubleTimeSeries test = base.stream() .map(point -> point.withValue(1.5d)) .collect(LocalDateDoubleTimeSeries.collector()); assertEquals(test.size(), 3); assertEquals(test.get(DATE_2010_01_01), OptionalDouble.of(1.5)); assertEquals(test.get(DATE_2011_01_01), OptionalDouble.of(1.5)); assertEquals(test.get(DATE_2012_01_01), OptionalDouble.of(1.5)); }
/** * Build the time-series from the builder. * * @return a time-series containing the entries from the builder */ public LocalDateDoubleTimeSeries build() { if (entries.isEmpty()) { return LocalDateDoubleTimeSeries.empty(); } // Depending on how dense the data is, judge which type of time series // is the best fit return density() > DENSITY_THRESHOLD ? createDenseSeries() : createSparseSeries(); }
public void test_earliestLatest_whenEmpty() { LocalDateDoubleTimeSeries test = LocalDateDoubleTimeSeries.empty(); TestHelper.assertThrows(() -> test.getEarliestDate(), NoSuchElementException.class); TestHelper.assertThrows(() -> test.getEarliestValue(), NoSuchElementException.class); TestHelper.assertThrows(() -> test.getLatestDate(), NoSuchElementException.class); TestHelper.assertThrows(() -> test.getLatestValue(), NoSuchElementException.class); }
public void partition() { List<LocalDate> dates = dates(DATE_2010_01_01, DATE_2011_06_01, DATE_2012_01_01, DATE_2013_06_01, DATE_2014_01_01); LocalDateDoubleTimeSeries series = LocalDateDoubleTimeSeries.builder().putAll(dates, VALUES_10_14).build(); Pair<LocalDateDoubleTimeSeries, LocalDateDoubleTimeSeries> partition = series.partition((ld, d) -> ld.getYear() % 2 == 0); LocalDateDoubleTimeSeries even = partition.getFirst(); LocalDateDoubleTimeSeries odd = partition.getSecond(); assertThat(even.size()).isEqualTo(3); assertThat(odd.size()).isEqualTo(2); assertThat(even.get(DATE_2010_01_01)).hasValue(10); assertThat(even.get(DATE_2012_01_01)).hasValue(12); assertThat(even.get(DATE_2014_01_01)).hasValue(14); assertThat(odd.get(DATE_2011_06_01)).hasValue(11); assertThat(odd.get(DATE_2013_06_01)).hasValue(13); }
public void partitionByValue() { List<LocalDate> dates = dates(DATE_2010_01_01, DATE_2011_06_01, DATE_2012_01_01, DATE_2013_06_01, DATE_2014_01_01); LocalDateDoubleTimeSeries series = LocalDateDoubleTimeSeries.builder().putAll(dates, VALUES_10_14).build(); Pair<LocalDateDoubleTimeSeries, LocalDateDoubleTimeSeries> partition = series.partitionByValue(d -> d > 10 && d < 14); LocalDateDoubleTimeSeries mid = partition.getFirst(); LocalDateDoubleTimeSeries extreme = partition.getSecond(); assertThat(mid.size()).isEqualTo(3); assertThat(extreme.size()).isEqualTo(2); assertThat(mid.get(DATE_2011_06_01)).hasValue(11); assertThat(mid.get(DATE_2012_01_01)).hasValue(12); assertThat(mid.get(DATE_2013_06_01)).hasValue(13); assertThat(extreme.get(DATE_2010_01_01)).hasValue(10); assertThat(extreme.get(DATE_2014_01_01)).hasValue(14); }
// ------------------------------------------------------------------------- public void test_filter_byDate() { List<LocalDate> dates = dates(DATE_2010_01_01, DATE_2011_06_01, DATE_2012_01_01, DATE_2013_06_01, DATE_2014_01_01); LocalDateDoubleTimeSeries base = LocalDateDoubleTimeSeries.builder().putAll(dates, VALUES_10_14).build(); LocalDateDoubleTimeSeries test = base.filter((ld, v) -> ld.getMonthValue() != 6); assertEquals(test.size(), 3); assertEquals(test.get(DATE_2010_01_01), OptionalDouble.of(10d)); assertEquals(test.get(DATE_2012_01_01), OptionalDouble.of(12d)); assertEquals(test.get(DATE_2014_01_01), OptionalDouble.of(14d)); }
public void test_combineWith_intersectionWithSomeMatchingElements() { LocalDateDoubleTimeSeries series1 = LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_14, VALUES_10_14).build(); List<LocalDate> dates2 = dates(DATE_2010_01_01, DATE_2011_06_01, DATE_2012_01_01, DATE_2013_06_01, DATE_2014_01_01); List<Double> values2 = values(1.0, 1.1, 1.2, 1.3, 1.4); LocalDateDoubleTimeSeries series2 = LocalDateDoubleTimeSeries.builder().putAll(dates2, values2).build(); LocalDateDoubleTimeSeries test = series1.intersection(series2, Double::sum); assertEquals(test.size(), 3); assertEquals(test.get(DATE_2010_01_01), OptionalDouble.of(11.0)); assertEquals(test.get(DATE_2012_01_01), OptionalDouble.of(13.2)); assertEquals(test.get(DATE_2014_01_01), OptionalDouble.of(15.4)); }
// ------------------------------------------------------------------------- public void test_earliestLatest() { LocalDateDoubleTimeSeries test = LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_12, VALUES_10_12).build(); assertEquals(test.getEarliestDate(), DATE_2010_01_01); assertEquals(test.getEarliestValue(), 10d, TOLERANCE); assertEquals(test.getLatestDate(), DATE_2012_01_01); assertEquals(test.getLatestValue(), 12d, TOLERANCE); }
public void test_filter_byValue() { LocalDateDoubleTimeSeries base = LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_14, VALUES_10_14).build(); LocalDateDoubleTimeSeries test = base.filter((ld, v) -> v % 2 == 1); assertEquals(test.size(), 2); assertEquals(test.get(DATE_2011_01_01), OptionalDouble.of(11d)); assertEquals(test.get(DATE_2013_01_01), OptionalDouble.of(13d)); }
// ------------------------------------------------------------------------- public void test_equals_similarSeriesAreEqual() { LocalDateDoubleTimeSeries series1 = LocalDateDoubleTimeSeries.of(DATE_2014_01_01, 1d); LocalDateDoubleTimeSeries series2 = LocalDateDoubleTimeSeries.builder().putAll(dates(DATE_2014_01_01), values(1d)).build(); assertEquals(series1.size(), 1); assertEquals(series1, series2); assertEquals(series1, series1); assertEquals(series1.hashCode(), series1.hashCode()); }
@Test(dataProvider = "tailSeries") public void test_tailSeries(int count, int[] expected) { LocalDateDoubleTimeSeries base = LocalDateDoubleTimeSeries.builder().putAll(DATES_2010_14, VALUES_10_14).build(); LocalDateDoubleTimeSeries test = base.tailSeries(count); assertEquals(test.size(), expected.length); for (int i = 0; i < DATES_2010_14.size(); i++) { if (Arrays.binarySearch(expected, i) >= 0) { assertEquals(test.get(DATES_2010_14.get(i)), OptionalDouble.of(VALUES_10_14.get(i))); } else { assertEquals(test.get(DATES_2010_14.get(i)), OptionalDouble.empty()); } } }
public void test_filter_byDateAndValue() { List<LocalDate> dates = dates(DATE_2010_01_01, DATE_2011_06_01, DATE_2012_01_01, DATE_2013_06_01, DATE_2014_01_01); LocalDateDoubleTimeSeries series = LocalDateDoubleTimeSeries.builder().putAll(dates, VALUES_10_14).build(); LocalDateDoubleTimeSeries test = series.filter((ld, v) -> ld.getYear() >= 2012 && v % 2 == 0); assertEquals(test.size(), 2); assertEquals(test.get(DATE_2012_01_01), OptionalDouble.of(12d)); assertEquals(test.get(DATE_2014_01_01), OptionalDouble.of(14d)); }
public void test_of_singleton_nullDateDisallowed() { assertThrowsIllegalArg(() -> LocalDateDoubleTimeSeries.of(null, 1d)); }