Skip to content

Commit

Permalink
core: fix too drastic continuity test on speed envelopes
Browse files Browse the repository at this point in the history
This case can happen after rounding errors when allowance is processed.

fix #7901
  • Loading branch information
bougue-pe committed Jul 5, 2024
1 parent 0114e7c commit 839f7ef
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import fr.sncf.osrd.envelope.part.EnvelopePart;
import fr.sncf.osrd.envelope_sim.TrainPhysicsIntegrator;
import fr.sncf.osrd.reporting.exceptions.ErrorType;
import fr.sncf.osrd.reporting.exceptions.OSRDError;
import java.util.ArrayList;
Expand Down Expand Up @@ -51,7 +52,8 @@ private Envelope(EnvelopePart[] parts) {
for (int i = 0; i < parts.length - 1; i++) {
if (parts[i].getEndPos() != parts[i + 1].getBeginPos())
throw new OSRDError(ErrorType.EnvelopePartsNotContiguous);
if (parts[i].getEndSpeed() != parts[i + 1].getBeginSpeed()) continuous = false;
if (!TrainPhysicsIntegrator.areSpeedsEqual(parts[i].getEndSpeed(), parts[i + 1].getBeginSpeed()))
continuous = false;
}

// find the minimum and maximum speeds for all envelope parts
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package fr.sncf.osrd.envelope;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

import org.junit.jupiter.api.Test;
Expand All @@ -14,6 +15,25 @@ public void testEnvelopeBuilder() {
assertTrue(env.continuous);
}

@Test
public void testEnvelopeBuilderEpsilonSpeedContinuity() {
// One example is that allowance can generate rounding errors
var builder = new EnvelopeBuilder();
builder.addPart(EnvelopeTestUtils.generateTimes(new double[] {0, 1}, new double[] {10, 20}));
builder.addPart(EnvelopeTestUtils.generateTimes(new double[] {1, 2}, new double[] {20.0000001, 30}));
var env = builder.build();
assertTrue(env.continuous);
}

@Test
public void testEnvelopeBuilderEpsilonSpeedDiscontinuity() {
var builder = new EnvelopeBuilder();
builder.addPart(EnvelopeTestUtils.generateTimes(new double[] {0, 1}, new double[] {10, 20}));
builder.addPart(EnvelopeTestUtils.generateTimes(new double[] {1, 2}, new double[] {20.001, 30}));
var env = builder.build();
assertFalse(env.continuous);
}

@Test
public void testEnvelopeBuilderReversed() {
var builder = new EnvelopeBuilder();
Expand Down

0 comments on commit 839f7ef

Please sign in to comment.