Skip to content

Commit fd476d6

Browse files
committed
disallow duplicate break id
1 parent 118240e commit fd476d6

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblem.java

+3
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,11 @@ private void addJobToFinalJobMapAndCreateActivities(Job job) {
281281

282282
private boolean addBreaksToActivityMap() {
283283
boolean hasBreaks = false;
284+
Set<String> uniqueBreakIds = new HashSet<>();
284285
for (Vehicle v : uniqueVehicles) {
285286
if (v.getBreak() != null) {
287+
if (!uniqueBreakIds.add(v.getBreak().getId()))
288+
throw new IllegalArgumentException("problem already contains a vehicle break with id " + v.getBreak().getId() + ". choose unique ids for each vehicle break.");
286289
hasBreaks = true;
287290
List<AbstractActivity> breakActivities = jobActivityFactory.createActivities(v.getBreak());
288291
if(breakActivities.isEmpty()) throw new IllegalArgumentException("at least one activity for break needs to be created by activityFactory");

jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblemTest.java

+16-4
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,7 @@
2222
import com.graphhopper.jsprit.core.problem.cost.VehicleRoutingActivityCosts;
2323
import com.graphhopper.jsprit.core.problem.driver.Driver;
2424
import com.graphhopper.jsprit.core.problem.driver.DriverImpl;
25-
import com.graphhopper.jsprit.core.problem.job.Delivery;
26-
import com.graphhopper.jsprit.core.problem.job.Pickup;
27-
import com.graphhopper.jsprit.core.problem.job.Service;
28-
import com.graphhopper.jsprit.core.problem.job.Shipment;
25+
import com.graphhopper.jsprit.core.problem.job.*;
2926
import com.graphhopper.jsprit.core.problem.solution.route.VehicleRoute;
3027
import com.graphhopper.jsprit.core.problem.solution.route.activity.TourActivity;
3128
import com.graphhopper.jsprit.core.problem.vehicle.Vehicle;
@@ -312,7 +309,22 @@ public void whenAddingVehiclesWithSameId_itShouldThrowException(){
312309
VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("loc")).setType(type).build();
313310
builder.addVehicle(vehicle1);
314311
builder.addVehicle(vehicle2);
312+
}
315313

314+
@Test(expected = IllegalArgumentException.class)
315+
public void whenBuildingProblemWithSameBreakId_itShouldThrowException(){
316+
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
317+
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build();
318+
VehicleImpl vehicle1 = VehicleImpl.Builder.newInstance("v1").setStartLocation(Location.newInstance("loc")).setType(type)
319+
.setBreak(Break.Builder.newInstance("break").build())
320+
.build();
321+
VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(Location.newInstance("loc")).setType(type)
322+
.setBreak(Break.Builder.newInstance("break").build())
323+
.build();
324+
builder.addVehicle(vehicle1);
325+
builder.addVehicle(vehicle2);
326+
builder.setFleetSize(FleetSize.FINITE);
327+
builder.build();
316328
}
317329

318330
@Test

0 commit comments

Comments
 (0)