|
34 | 34 | import org.matsim.api.core.v01.Coord; |
35 | 35 | import org.matsim.api.core.v01.Id; |
36 | 36 | import org.matsim.api.core.v01.Scenario; |
| 37 | +import org.matsim.api.core.v01.network.Link; |
37 | 38 | import org.matsim.api.core.v01.network.Network; |
38 | 39 | import org.matsim.contrib.roadpricing.*; |
39 | 40 | import org.matsim.core.config.Config; |
40 | 41 | import org.matsim.core.config.ConfigUtils; |
| 42 | +import org.matsim.core.network.NetworkChangeEvent; |
| 43 | +import org.matsim.core.network.TimeDependentNetwork; |
41 | 44 | import org.matsim.core.network.io.MatsimNetworkReader; |
42 | 45 | import org.matsim.core.scenario.ScenarioUtils; |
43 | 46 | import org.matsim.core.utils.misc.Time; |
@@ -162,6 +165,45 @@ void test_whenAddingTwoVehicleTypesViaConstructor_itMustAccountForThat(){ |
162 | 165 | Assertions.assertEquals(20000.0, networkBasedTransportCosts.getDistance(Location.newInstance("6"), Location.newInstance("21"), 0.0, vehicle2), 0.01); |
163 | 166 | } |
164 | 167 |
|
| 168 | + @Test |
| 169 | + void test_whenNetworkChangeEventsArePresent_itUsesTimeDependentFreespeed() { |
| 170 | + Config config = ConfigUtils.createConfig(); |
| 171 | + config.network().setTimeVariantNetwork(true); |
| 172 | + Scenario scenario = ScenarioUtils.createScenario(config); |
| 173 | + String NETWORK_FILENAME = utils.getClassInputDirectory() + "network.xml"; |
| 174 | + new MatsimNetworkReader(scenario.getNetwork()).readFile(NETWORK_FILENAME); |
| 175 | + Network network = scenario.getNetwork(); |
| 176 | + |
| 177 | + Id<Link> fromLinkId = Id.createLinkId("20"); |
| 178 | + Id<Link> toLinkId = Id.createLinkId("21"); |
| 179 | + Link toLink = network.getLinks().get(toLinkId); |
| 180 | + double originalFreespeed = toLink.getFreespeed(); |
| 181 | + |
| 182 | + NetworkChangeEvent changeEvent = new NetworkChangeEvent(3600.0); |
| 183 | + changeEvent.addLink(toLink); |
| 184 | + changeEvent.setFreespeedChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.ABSOLUTE_IN_SI_UNITS, 1.0)); |
| 185 | + ((TimeDependentNetwork) network).addNetworkChangeEvent(changeEvent); |
| 186 | + |
| 187 | + NetworkBasedTransportCosts.Builder builder = NetworkBasedTransportCosts.Builder.newInstance(network); |
| 188 | + builder.addVehicleTypeSpecificCosts(TYPE_1, 0.0, 1.0, 0.0); |
| 189 | + NetworkBasedTransportCosts c = builder |
| 190 | + .setTimeSliceWidth(900) |
| 191 | + .build(); |
| 192 | + |
| 193 | + Vehicle vehicle = mock(Vehicle.class); |
| 194 | + com.graphhopper.jsprit.core.problem.vehicle.VehicleType type = mock(com.graphhopper.jsprit.core.problem.vehicle.VehicleType.class); |
| 195 | + when(type.getMaxVelocity()).thenReturn(100.0); |
| 196 | + when(type.getTypeId()).thenReturn(TYPE_1); |
| 197 | + when(vehicle.getType()).thenReturn(type); |
| 198 | + when(vehicle.getId()).thenReturn("vehicle1"); |
| 199 | + |
| 200 | + double beforeChange = c.getTransportTime(Location.newInstance(fromLinkId.toString()), Location.newInstance(toLinkId.toString()), 0.0, mock(Driver.class), vehicle); |
| 201 | + double afterChange = c.getTransportTime(Location.newInstance(fromLinkId.toString()), Location.newInstance(toLinkId.toString()), 3600.0, mock(Driver.class), vehicle); |
| 202 | + |
| 203 | + Assertions.assertEquals(toLink.getLength() / originalFreespeed, beforeChange, 0.01); |
| 204 | + Assertions.assertEquals(toLink.getLength(), afterChange, 0.01); |
| 205 | + } |
| 206 | + |
165 | 207 |
|
166 | 208 | /** |
167 | 209 | * This test is a modified version of {@link #test_whenAddingTwoDifferentVehicleTypes_itMustAccountForThem} |
|
0 commit comments