From fd476d6affebe7f28010c0c2b292abfb4862cff7 Mon Sep 17 00:00:00 2001 From: He Huang Date: Tue, 11 Jul 2017 14:34:33 +0800 Subject: [PATCH] disallow duplicate break id --- .../core/problem/VehicleRoutingProblem.java | 3 +++ .../problem/VehicleRoutingProblemTest.java | 20 +++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblem.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblem.java index 544c4fe9..4e88701e 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblem.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblem.java @@ -281,8 +281,11 @@ public class VehicleRoutingProblem { private boolean addBreaksToActivityMap() { boolean hasBreaks = false; + Set uniqueBreakIds = new HashSet<>(); for (Vehicle v : uniqueVehicles) { if (v.getBreak() != null) { + if (!uniqueBreakIds.add(v.getBreak().getId())) + throw new IllegalArgumentException("problem already contains a vehicle break with id " + v.getBreak().getId() + ". choose unique ids for each vehicle break."); hasBreaks = true; List breakActivities = jobActivityFactory.createActivities(v.getBreak()); if(breakActivities.isEmpty()) throw new IllegalArgumentException("at least one activity for break needs to be created by activityFactory"); diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblemTest.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblemTest.java index 0722a551..4ad1eec7 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblemTest.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblemTest.java @@ -22,10 +22,7 @@ import com.graphhopper.jsprit.core.problem.cost.AbstractForwardVehicleRoutingTra import com.graphhopper.jsprit.core.problem.cost.VehicleRoutingActivityCosts; import com.graphhopper.jsprit.core.problem.driver.Driver; import com.graphhopper.jsprit.core.problem.driver.DriverImpl; -import com.graphhopper.jsprit.core.problem.job.Delivery; -import com.graphhopper.jsprit.core.problem.job.Pickup; -import com.graphhopper.jsprit.core.problem.job.Service; -import com.graphhopper.jsprit.core.problem.job.Shipment; +import com.graphhopper.jsprit.core.problem.job.*; import com.graphhopper.jsprit.core.problem.solution.route.VehicleRoute; import com.graphhopper.jsprit.core.problem.solution.route.activity.TourActivity; import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; @@ -312,7 +309,22 @@ public class VehicleRoutingProblemTest { VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance("loc")).setType(type).build(); builder.addVehicle(vehicle1); builder.addVehicle(vehicle2); + } + @Test(expected = IllegalArgumentException.class) + public void whenBuildingProblemWithSameBreakId_itShouldThrowException(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build(); + VehicleImpl vehicle1 = VehicleImpl.Builder.newInstance("v1").setStartLocation(Location.newInstance("loc")).setType(type) + .setBreak(Break.Builder.newInstance("break").build()) + .build(); + VehicleImpl vehicle2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(Location.newInstance("loc")).setType(type) + .setBreak(Break.Builder.newInstance("break").build()) + .build(); + builder.addVehicle(vehicle1); + builder.addVehicle(vehicle2); + builder.setFleetSize(FleetSize.FINITE); + builder.build(); } @Test