package tim.prune.data; import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; /** * JUnit tests for calculation of moving time of a range * based on different timestamp availability * @author fperrin */ class RangeStatsTest { @Test void movingTime() { Track track = new Track(); DataPoint[] points = { new DataPoint( new String[] { "01-Jan-2020 00:00:00", }, new FieldList(new Field[] { Field.TIMESTAMP, }), null), new DataPoint( new String[] { "01-Jan-2020 00:00:05", }, new FieldList(new Field[] { Field.TIMESTAMP, }), null), new DataPoint( new String[] { "01-Jan-2020 00:00:07", }, new FieldList(new Field[] { Field.TIMESTAMP, }), null), }; track.appendPoints(points); RangeStats range = new RangeStats(track, 0, track.getNumPoints() - 1); assertEquals(7, range.getMovingDurationInSeconds()); assertEquals(7, range.getTotalDurationInSeconds()); assertFalse(range.getTimestampsIncomplete()); assertFalse(range.getTimestampsOutOfSequence()); } @Test void movingTimeWithGap() { Track track = new Track(); DataPoint[] points = { new DataPoint( new String[] { "01-Jan-2020 00:00:00", }, new FieldList(new Field[] { Field.TIMESTAMP, }), null), new DataPoint( new String[] {}, new FieldList(new Field[] {}), null), new DataPoint( new String[] { "01-Jan-2020 00:00:05", }, new FieldList(new Field[] { Field.TIMESTAMP, }), null), new DataPoint( new String[] { "01-Jan-2020 00:00:07", }, new FieldList(new Field[] { Field.TIMESTAMP, }), null), }; track.appendPoints(points); RangeStats range = new RangeStats(track, 0, track.getNumPoints() - 1); assertEquals(7, range.getMovingDurationInSeconds()); assertEquals(7, range.getTotalDurationInSeconds()); assertTrue(range.getTimestampsIncomplete()); assertFalse(range.getTimestampsOutOfSequence()); } @Test void movingTimeSeveralSegments() { Track track = new Track(); DataPoint[] points = { new DataPoint( new String[] { "01-Jan-2020 00:01:00", }, new FieldList(new Field[] { Field.TIMESTAMP, }), null), new DataPoint( new String[] {}, new FieldList(new Field[] {}), null), new DataPoint( new String[] { "01-Jan-2020 00:01:05", }, new FieldList(new Field[] { Field.TIMESTAMP, }), null), new DataPoint( new String[] { "01-Jan-2020 00:01:07", }, new FieldList(new Field[] { Field.TIMESTAMP, }), null), // start a second segment new DataPoint( new String[] { "01-Jan-2020 00:00:20", "1", }, new FieldList(new Field[] { Field.TIMESTAMP, Field.NEW_SEGMENT, }), null), new DataPoint( new String[] { "01-Jan-2020 00:00:27", }, new FieldList(new Field[] { Field.TIMESTAMP, }), null), }; track.appendPoints(points); RangeStats range = new RangeStats(track, 0, track.getNumPoints() - 1); assertEquals(7 + 7, range.getMovingDurationInSeconds()); assertEquals(47, range.getTotalDurationInSeconds()); assertTrue(range.getEarliestTimestamp().isEqual(new TimestampUtc("01-Jan-2020 00:00:20"))); assertTrue(range.getLatestTimestamp().isEqual(new TimestampUtc("01-Jan-2020 00:01:07"))); assertTrue(range.getTimestampsIncomplete()); // even though segment 2 is earlier than segment 1, timestamps // within each segment are normally ordered assertFalse(range.getTimestampsOutOfSequence()); } @Test void movingTimeMissingFirstTimestamp() { Track track = new Track(); DataPoint[] points = { new DataPoint( new String[] {}, new FieldList(new Field[] {}), null), new DataPoint( new String[] { "01-Jan-2020 00:00:00", }, new FieldList(new Field[] { Field.TIMESTAMP, }), null), new DataPoint( new String[] { "01-Jan-2020 00:00:05", }, new FieldList(new Field[] { Field.TIMESTAMP, }), null), }; track.appendPoints(points); RangeStats range = new RangeStats(track, 0, track.getNumPoints() - 1); assertEquals(5, range.getMovingDurationInSeconds()); assertEquals(5, range.getTotalDurationInSeconds()); assertTrue(range.getTimestampsIncomplete()); assertFalse(range.getTimestampsOutOfSequence()); } }