InstantColumnTest.java

package tech.tablesaw.api;

import static org.junit.jupiter.api.Assertions.*;

import java.time.Instant;
import java.util.Arrays;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import tech.tablesaw.columns.AbstractColumnParser;

class InstantColumnTest {

  private final InstantColumn instanceColumn = InstantColumn.create("Test");

  private Instant now = Instant.now();

  private long baseline = now.getEpochSecond();
  private long before = baseline - 100L;
  private long after = baseline + 100L;

  private Instant baselineInst = Instant.ofEpochSecond(baseline);
  private Instant beforeInst = Instant.ofEpochSecond(before);
  private Instant afterInst = Instant.ofEpochSecond(after);

  @BeforeEach
  void setUp() {

    instanceColumn.append(beforeInst);
    instanceColumn.append(baselineInst);
    instanceColumn.append(afterInst);
    instanceColumn.appendMissing();
  }

  @Test
  void isAfter() {
    assertEquals(2, instanceColumn.isAfter(baselineInst).get(0));
  }

  @Test
  void isBefore() {
    assertEquals(0, instanceColumn.isBefore(baselineInst).get(0));
    assertEquals(1, instanceColumn.isBefore(afterInst).get(1));
  }

  @Test
  void isEqualTo() {
    assertEquals(2, instanceColumn.isEqualTo(afterInst).get(0));
  }

  @Test
  void isMissing() {
    assertEquals(3, instanceColumn.isMissing().get(0));
  }

  @Test
  void isNotMissing() {
    assertEquals(0, instanceColumn.isNotMissing().get(0));
    assertEquals(1, instanceColumn.isNotMissing().get(1));
    assertEquals(2, instanceColumn.isNotMissing().get(2));
  }

  @Test
  public void testCountUnique() {
    InstantColumn column1 = InstantColumn.create("instants");
    column1.append(baselineInst);
    column1.append(baselineInst);
    column1.append(afterInst);
    column1.appendMissing();

    assertEquals(3, column1.countUnique());
  }

  @Test
  public void testCustomParser() {
    class CustomParser extends AbstractColumnParser<Instant> {

      private final List<String> VALID_VALUES = Arrays.asList("now");

      public CustomParser() {
        super(ColumnType.INSTANT);
      }

      @Override
      public boolean canParse(String s) {
        return true;
      }

      @Override
      public Instant parse(String s) {
        return VALID_VALUES.contains(s) ? Instant.now() : null;
      }
    }

    InstantColumn column1 = InstantColumn.create("instants");
    column1.setParser(new CustomParser());

    // Just do enough to ensure the parser is wired up correctly
    column1.appendCell("not now");
    assertTrue(column1.isMissing(0));
    column1.appendCell("now");
    assertFalse(column1.isMissing(1));
  }
}