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);
 }
  /**
   * 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_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_emptySeries() {
   LocalDateDoubleTimeSeries test = LocalDateDoubleTimeSeries.empty();
   assertEquals(test.isEmpty(), true);
   assertEquals(test.size(), 0);
   assertEquals(test.containsDate(DATE_2010_01_01), false);
   assertEquals(test.containsDate(DATE_2011_01_01), false);
   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.empty());
   assertEquals(test.get(DATE_2012_01_01), OptionalDouble.empty());
   assertEquals(test, LocalDateDoubleTimeSeries.builder().putAll(dates(), values()).build());
   assertEquals(test.dates().count(), 0);
   assertEquals(test.values().count(), 0);
 }
 @Test(dataProvider = "tailSeries")
 public void test_tailSeries_emptySeries(int count, int[] expected) {
   LocalDateDoubleTimeSeries test = LocalDateDoubleTimeSeries.empty().tailSeries(count);
   assertEquals(test.size(), 0);
 }
 @Test(dataProvider = "subSeries")
 public void test_subSeries_emptySeries(LocalDate start, LocalDate end, int[] expected) {
   LocalDateDoubleTimeSeries test = LocalDateDoubleTimeSeries.empty().subSeries(start, end);
   assertEquals(test.size(), 0);
 }