From 0b52eacbadb23e2f6b3f6a2ab2f6593887c1ab39 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fr=C3=A9d=C3=A9ric=20Perrin?= Date: Sun, 7 Mar 2021 19:42:38 +0000 Subject: [PATCH] Add unit-tests for computing moving time with points missing timestamps --- test/tim/prune/data/TestRangeStats.java | 172 ++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 test/tim/prune/data/TestRangeStats.java diff --git a/test/tim/prune/data/TestRangeStats.java b/test/tim/prune/data/TestRangeStats.java new file mode 100644 index 0000000..1493895 --- /dev/null +++ b/test/tim/prune/data/TestRangeStats.java @@ -0,0 +1,172 @@ +package tim.prune; + +import tim.prune.data.DataPoint; +import tim.prune.data.Field; +import tim.prune.data.FieldList; +import tim.prune.data.RangeStats; +import tim.prune.data.TimestampUtc; +import tim.prune.data.Track; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertFalse; + +public class TestRangeStats { + @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), + }; + track.appendPoints(points); + + RangeStats range = new RangeStats(track, 0, track.getNumPoints() - 1); + assertEquals(5, range.getMovingDurationInSeconds()); + assertEquals(5, 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), + }; + 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()); + } + + @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), + // 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(5 + 7, range.getMovingDurationInSeconds()); + assertEquals(45, 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:05"))); + 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()); + } + +} -- 2.43.0