Skip to content

Commit 65e47e6

Browse files
committed
test: Add unit test for pass-through-points in RaptorRequestMapper
1 parent 31a621b commit 65e47e6

File tree

3 files changed

+77
-13
lines changed

3 files changed

+77
-13
lines changed

src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ private TransitRouterResult route() {
121121
);
122122

123123
// Prepare transit search
124-
var raptorRequest = RaptorRequestMapper.mapRequest(
124+
var raptorRequest = RaptorRequestMapper.<TripSchedule>mapRequest(
125125
request,
126126
transitSearchTimeZero,
127127
serverContext.raptorConfig().isMultiThreaded(),

src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapper.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.opentripplanner.raptor.api.model.GeneralizedCostRelaxFunction;
1313
import org.opentripplanner.raptor.api.model.RaptorAccessEgress;
1414
import org.opentripplanner.raptor.api.model.RaptorConstants;
15+
import org.opentripplanner.raptor.api.model.RaptorTripSchedule;
1516
import org.opentripplanner.raptor.api.model.RelaxFunction;
1617
import org.opentripplanner.raptor.api.request.DebugRequestBuilder;
1718
import org.opentripplanner.raptor.api.request.Optimization;
@@ -28,7 +29,7 @@
2829
import org.opentripplanner.routing.api.request.framework.CostLinearFunction;
2930
import org.opentripplanner.transit.model.site.StopLocation;
3031

31-
public class RaptorRequestMapper {
32+
public class RaptorRequestMapper<T extends RaptorTripSchedule> {
3233

3334
private final RouteRequest request;
3435
private final Collection<? extends RaptorAccessEgress> accessPaths;
@@ -56,7 +57,7 @@ private RaptorRequestMapper(
5657
this.meterRegistry = meterRegistry;
5758
}
5859

59-
public static RaptorRequest<TripSchedule> mapRequest(
60+
public static <T extends RaptorTripSchedule> RaptorRequest<T> mapRequest(
6061
RouteRequest request,
6162
ZonedDateTime transitSearchTimeZero,
6263
boolean isMultiThreaded,
@@ -65,7 +66,7 @@ public static RaptorRequest<TripSchedule> mapRequest(
6566
Duration searchWindowAccessSlack,
6667
MeterRegistry meterRegistry
6768
) {
68-
return new RaptorRequestMapper(
69+
return new RaptorRequestMapper<T>(
6970
request,
7071
isMultiThreaded,
7172
accessPaths,
@@ -77,8 +78,8 @@ public static RaptorRequest<TripSchedule> mapRequest(
7778
.doMap();
7879
}
7980

80-
private RaptorRequest<TripSchedule> doMap() {
81-
var builder = new RaptorRequestBuilder<TripSchedule>();
81+
private RaptorRequest<T> doMap() {
82+
var builder = new RaptorRequestBuilder<T>();
8283
var searchParams = builder.searchParams();
8384

8485
var preferences = request.preferences();
@@ -176,13 +177,15 @@ private RaptorRequest<TripSchedule> doMap() {
176177
}
177178

178179
// Add this last, it depends on generating an alias from the set values
179-
builder.performanceTimers(
180-
new PerformanceTimersForRaptor(
181-
builder.generateAlias(),
182-
preferences.system().tags(),
183-
meterRegistry
184-
)
185-
);
180+
if (meterRegistry != null) {
181+
builder.performanceTimers(
182+
new PerformanceTimersForRaptor(
183+
builder.generateAlias(),
184+
preferences.system().tags(),
185+
meterRegistry
186+
)
187+
);
188+
}
186189

187190
return builder.build();
188191
}

src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapperTest.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,33 @@
11
package org.opentripplanner.routing.algorithm.raptoradapter.transit.mappers;
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
45

6+
import java.time.Duration;
7+
import java.time.ZonedDateTime;
58
import java.util.List;
9+
import org.junit.jupiter.api.Test;
610
import org.junit.jupiter.params.ParameterizedTest;
711
import org.junit.jupiter.params.provider.Arguments;
812
import org.junit.jupiter.params.provider.MethodSource;
13+
import org.opentripplanner.raptor._data.transit.TestAccessEgress;
14+
import org.opentripplanner.raptor._data.transit.TestTripSchedule;
15+
import org.opentripplanner.raptor.api.model.RaptorAccessEgress;
16+
import org.opentripplanner.raptor.api.request.RaptorRequest;
17+
import org.opentripplanner.routing.api.request.PassThroughPoint;
18+
import org.opentripplanner.routing.api.request.RouteRequest;
919
import org.opentripplanner.routing.api.request.framework.CostLinearFunction;
20+
import org.opentripplanner.transit.model._data.TransitModelForTest;
21+
import org.opentripplanner.transit.model.site.StopLocation;
1022

1123
class RaptorRequestMapperTest {
1224

25+
private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of();
26+
private static final StopLocation STOP_A = TEST_MODEL.stop("Stop:A").build();
27+
private static final List<RaptorAccessEgress> ACCESS = List.of(TestAccessEgress.walk(12, 45));
28+
private static final List<RaptorAccessEgress> EGRESS = List.of(TestAccessEgress.walk(144, 54));
29+
private static final Duration D0s = Duration.ofSeconds(0);
30+
1331
private static final CostLinearFunction R1 = CostLinearFunction.of("50 + 1.0x");
1432
private static final CostLinearFunction R2 = CostLinearFunction.of("0 + 1.5x");
1533
private static final CostLinearFunction R3 = CostLinearFunction.of("30 + 2.0x");
@@ -33,4 +51,47 @@ void mapRelaxCost(CostLinearFunction input, int cost, int expected) {
3351
var calcCost = RaptorRequestMapper.mapRelaxCost(input);
3452
assertEquals(expected, calcCost.relax(cost));
3553
}
54+
55+
@Test
56+
void testPassThroughPoints() {
57+
var req = new RouteRequest();
58+
59+
req.setPassThroughPoints(List.of(new PassThroughPoint(List.of(STOP_A), "Via A")));
60+
61+
var result = map(req);
62+
63+
assertTrue(result.multiCriteria().hasPassThroughPoints());
64+
assertEquals(
65+
"[(Via A, stops: " + STOP_A.getIndex() + ")]",
66+
result.multiCriteria().passThroughPoints().toString()
67+
);
68+
}
69+
70+
@Test
71+
void testPassThroughPointsTurnTransitGroupPriorityOff() {
72+
var req = new RouteRequest();
73+
74+
// Set pass-through and relax transit-group-priority
75+
req.setPassThroughPoints(List.of(new PassThroughPoint(List.of(STOP_A), "Via A")));
76+
req.withPreferences(p ->
77+
p.withTransit(t -> t.withRelaxTransitGroupPriority(CostLinearFunction.of("30m + 1.2t")))
78+
);
79+
80+
var result = map(req);
81+
82+
// transit-group-priority CANNOT be used with pass-through and is turned off...
83+
assertTrue(result.multiCriteria().transitPriorityCalculator().isEmpty());
84+
}
85+
86+
private static RaptorRequest<TestTripSchedule> map(RouteRequest request) {
87+
return RaptorRequestMapper.mapRequest(
88+
request,
89+
ZonedDateTime.now(),
90+
false,
91+
ACCESS,
92+
EGRESS,
93+
D0s,
94+
null
95+
);
96+
}
3697
}

0 commit comments

Comments
 (0)