package tech.tablesaw.columns.dates;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static tech.tablesaw.api.DateColumn.create;
import static tech.tablesaw.columns.temporal.fillers.TemporalRangeIterable.range;

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;

public class DateFillersTest {

  protected void assertContentEquals(Iterable<LocalDate> times, LocalDate... expected) {
    int num = 0;
    for (LocalDate value : times) {
      assertEquals(expected[num], value);
      num++;
    }
    assertEquals(expected.length, num);
  }

  @Test
  public void testFromToBy() {
    assertContentEquals(
        create("dates", new LocalDate[5])
            .fillWith(
                range(
                    LocalDate.of(2018, 3, 1), // year, month, day
                    LocalDate.of(2019, 3, 1),
                    1,
                    ChronoUnit.DAYS)),
        LocalDate.of(2018, 3, 1), // year, month, day
        LocalDate.of(2018, 3, 2),
        LocalDate.of(2018, 3, 3),
        LocalDate.of(2018, 3, 4),
        LocalDate.of(2018, 3, 5));

    assertContentEquals(
        create("dates", new LocalDate[5])
            .fillWith(
                range(
                    LocalDate.of(2018, 3, 1), // year, month, day
                    LocalDate.of(2019, 3, 1),
                    1,
                    ChronoUnit.MONTHS)),
        LocalDate.of(2018, 3, 1), // year, month, day
        LocalDate.of(2018, 4, 1),
        LocalDate.of(2018, 5, 1),
        LocalDate.of(2018, 6, 1),
        LocalDate.of(2018, 7, 1));
  }
}
