@@ -2,6 +2,7 @@ package fr.sncf.osrd.pathfinding
2
2
3
3
import fr.sncf.osrd.api.ApiTest
4
4
import fr.sncf.osrd.api.pathfinding.PathfindingBlocksEndpoint
5
+ import fr.sncf.osrd.api.pathfinding.convertPathfindingResult
5
6
import fr.sncf.osrd.api.pathfinding.request.PathfindingRequest
6
7
import fr.sncf.osrd.api.pathfinding.request.PathfindingWaypoint
7
8
import fr.sncf.osrd.api.pathfinding.response.CurveChartPointResult
@@ -10,18 +11,18 @@ import fr.sncf.osrd.api.pathfinding.response.PathWaypointResult.PathWaypointLoca
10
11
import fr.sncf.osrd.api.pathfinding.response.PathfindingResult
11
12
import fr.sncf.osrd.api.pathfinding.response.SlopeChartPointResult
12
13
import fr.sncf.osrd.api.pathfinding.runPathfinding
14
+ import fr.sncf.osrd.api.pathfinding.validatePathfindingResult
13
15
import fr.sncf.osrd.cli.StandaloneSimulationCommand
14
16
import fr.sncf.osrd.railjson.schema.common.graph.ApplicableDirection
15
17
import fr.sncf.osrd.railjson.schema.common.graph.EdgeDirection
18
+ import fr.sncf.osrd.railjson.schema.infra.RJSOperationalPoint
16
19
import fr.sncf.osrd.railjson.schema.infra.RJSRoutePath
17
20
import fr.sncf.osrd.railjson.schema.infra.RJSTrackSection
18
- import fr.sncf.osrd.railjson.schema.infra.trackranges.RJSApplicableDirectionsTrackRange
19
- import fr.sncf.osrd.railjson.schema.infra.trackranges.RJSCatenary
20
- import fr.sncf.osrd.railjson.schema.infra.trackranges.RJSDirectionalTrackRange
21
- import fr.sncf.osrd.railjson.schema.infra.trackranges.RJSLoadingGaugeLimit
21
+ import fr.sncf.osrd.railjson.schema.infra.trackranges.*
22
22
import fr.sncf.osrd.railjson.schema.rollingstock.RJSLoadingGaugeType
23
23
import fr.sncf.osrd.reporting.exceptions.ErrorType
24
24
import fr.sncf.osrd.reporting.exceptions.OSRDError
25
+ import fr.sncf.osrd.reporting.warnings.DiagnosticRecorderImpl
25
26
import fr.sncf.osrd.train.TestTrains
26
27
import fr.sncf.osrd.utils.Helpers
27
28
import fr.sncf.osrd.utils.moshi.MoshiUtils
@@ -43,6 +44,7 @@ import java.util.stream.Collectors
43
44
import java.util.stream.Stream
44
45
import kotlin.math.max
45
46
import kotlin.math.min
47
+ import kotlin.test.assertEquals
46
48
47
49
@TestInstance(TestInstance .Lifecycle .PER_CLASS )
48
50
class PathfindingTest : ApiTest () {
@@ -624,6 +626,60 @@ class PathfindingTest : ApiTest() {
624
626
)
625
627
}
626
628
629
+ @Test
630
+ fun pathStartingAtTrackEdge () {
631
+ /*
632
+ foo_a foo_to_bar bar_a
633
+ ------>|----------->|------>
634
+ ^ ^
635
+ new_op_1 new_op_2
636
+ */
637
+ val waypointStart = PathfindingWaypoint (" ne.micro.foo_a" , 200.0 , EdgeDirection .START_TO_STOP )
638
+ val waypointEnd = PathfindingWaypoint (" ne.micro.bar_a" , 0.0 , EdgeDirection .START_TO_STOP )
639
+ val waypoints = Array (2 ) { Array (1 ) { waypointStart } }
640
+ waypoints[1 ][0 ] = waypointEnd
641
+ val rjsInfra = Helpers .getExampleInfra(" tiny_infra/infra.json" )
642
+ rjsInfra.operationalPoints.add(
643
+ RJSOperationalPoint (
644
+ " new_op_1" , listOf (
645
+ RJSOperationalPointPart (" ne.micro.foo_a" , 200.0 )
646
+ )
647
+ )
648
+ )
649
+ rjsInfra.operationalPoints.add(
650
+ RJSOperationalPoint (
651
+ " new_op_2" , listOf (
652
+ RJSOperationalPointPart (" ne.micro.bar_a" , 0.0 )
653
+ )
654
+ )
655
+ )
656
+ val infra = Helpers .fullInfraFromRJS(rjsInfra)
657
+
658
+ val path = runPathfinding(
659
+ infra,
660
+ waypoints,
661
+ listOf (TestTrains .REALISTIC_FAST_TRAIN )
662
+ )
663
+ val res = convertPathfindingResult(
664
+ infra.blockInfra, infra.rawInfra,
665
+ path, DiagnosticRecorderImpl (true )
666
+ )
667
+ validatePathfindingResult(res, waypoints, infra.rawInfra)
668
+ assertEquals(
669
+ listOf (
670
+ PathWaypointResult (
671
+ PathWaypointLocation (" ne.micro.foo_a" , 200.0 ),
672
+ 0.0 , false , " new_op_1"
673
+ ),
674
+ PathWaypointResult (
675
+ PathWaypointLocation (" ne.micro.bar_a" , 0.0 ),
676
+ 10_000.0 , false , " new_op_2"
677
+ ),
678
+ ),
679
+ res.pathWaypoints
680
+ )
681
+ }
682
+
627
683
companion object {
628
684
private const val SIGNALING_TYPE = " BAL3"
629
685
private fun makeBidirectionalEndPoint (point : PathfindingWaypoint ): Array <PathfindingWaypoint > {
0 commit comments