From 5426f1d905c043df8b1153aab1c20b71c2d3af01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Henriot?= Date: Wed, 31 Jan 2024 11:42:21 +0100 Subject: [PATCH] core: consider skipped stops --- .../standalone_sim/EnvelopeStopWrapper.java | 2 +- .../EnvelopeStopWrapperTests.java | 50 +++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 core/src/test/java/fr/sncf/osrd/standalone_sim/EnvelopeStopWrapperTests.java diff --git a/core/src/main/java/fr/sncf/osrd/standalone_sim/EnvelopeStopWrapper.java b/core/src/main/java/fr/sncf/osrd/standalone_sim/EnvelopeStopWrapper.java index 36e49c3d10f..93409185604 100644 --- a/core/src/main/java/fr/sncf/osrd/standalone_sim/EnvelopeStopWrapper.java +++ b/core/src/main/java/fr/sncf/osrd/standalone_sim/EnvelopeStopWrapper.java @@ -64,7 +64,7 @@ public List iteratePoints() { point.speed(), point.position() ); res.add(shiftedPoint); - if (stopIndex < stops.size() && arePositionsEqual(point.position(), stops.get(stopIndex).position)) { + if (stopIndex < stops.size() && point.position() >= stops.get(stopIndex).position) { var stopDuration = stops.get(stopIndex).duration; stopIndex++; sumPreviousStopDuration += stopDuration; diff --git a/core/src/test/java/fr/sncf/osrd/standalone_sim/EnvelopeStopWrapperTests.java b/core/src/test/java/fr/sncf/osrd/standalone_sim/EnvelopeStopWrapperTests.java new file mode 100644 index 00000000000..4f02df32af8 --- /dev/null +++ b/core/src/test/java/fr/sncf/osrd/standalone_sim/EnvelopeStopWrapperTests.java @@ -0,0 +1,50 @@ +package fr.sncf.osrd.standalone_sim; + +import fr.sncf.osrd.envelope.EnvelopeTimeInterpolate; +import fr.sncf.osrd.envelope.Envelope; +import fr.sncf.osrd.envelope.EnvelopeTestUtils; +import fr.sncf.osrd.train.TrainStop; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import java.util.List; + +public class EnvelopeStopWrapperTests { + @Test + public void iteratePointsWithoutStops() { + var envelopeFloor = Envelope.make(EnvelopeTestUtils.generateTimes( + new double[]{0, 1, 2, 3, 4, 5, 6}, + new double[]{1, 1, 1, 1, 1, 1, 1} + )); + var envelopeStopWrapper = new EnvelopeStopWrapper(envelopeFloor, List.of()); + Assertions.assertEquals(List.of( + new EnvelopeTimeInterpolate.EnvelopePoint(0, 1, 0), + new EnvelopeTimeInterpolate.EnvelopePoint(1, 1, 1), + new EnvelopeTimeInterpolate.EnvelopePoint(2, 1, 2), + new EnvelopeTimeInterpolate.EnvelopePoint(3, 1, 3), + new EnvelopeTimeInterpolate.EnvelopePoint(4, 1, 4), + new EnvelopeTimeInterpolate.EnvelopePoint(5, 1, 5), + new EnvelopeTimeInterpolate.EnvelopePoint(6, 1, 6) + ), envelopeStopWrapper.iteratePoints()); + } + + @Test + public void iteratePointsWithStops() { + var envelopeFloor = Envelope.make(EnvelopeTestUtils.generateTimes( + new double[]{0, 1, 2, 3, 4, 5, 6}, + new double[]{1, 1, 1, 0, 1, 1, 1} + )); + var envelopeStopWrapper = new EnvelopeStopWrapper(envelopeFloor, List.of( + new TrainStop(1.5, 0), + new TrainStop(3, 10) + )); + Assertions.assertEquals(List.of( + new EnvelopeTimeInterpolate.EnvelopePoint(0, 1, 0), + new EnvelopeTimeInterpolate.EnvelopePoint(1, 1, 1), + new EnvelopeTimeInterpolate.EnvelopePoint(2, 1, 2), + new EnvelopeTimeInterpolate.EnvelopePoint(4, 0, 3), + new EnvelopeTimeInterpolate.EnvelopePoint(6 + 10, 1, 4), + new EnvelopeTimeInterpolate.EnvelopePoint(7 + 10, 1, 5), + new EnvelopeTimeInterpolate.EnvelopePoint(8 + 10, 1, 6) + ), envelopeStopWrapper.iteratePoints()); + } +}