diff --git a/jsprit-core/src/test/java/jsprit/core/problem/io/VrpWriterV2Test.java b/jsprit-core/src/test/java/jsprit/core/problem/io/VrpWriterV2Test.java index f029647c..0f5056ca 100644 --- a/jsprit-core/src/test/java/jsprit/core/problem/io/VrpWriterV2Test.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/io/VrpWriterV2Test.java @@ -119,6 +119,32 @@ public class VrpWriterV2Test { assertEquals(2.0,s1_read.getServiceDuration(),0.01); } + @Test + public void whenWritingServicesWithSeveralCapacityDimensions_itWritesThemCorrectly(){ + Builder builder = VehicleRoutingProblem.Builder.newInstance(); + + Service s1 = Service.Builder.newInstance("1") + .addCapacityDimension(0, 20) + .addCapacityDimension(1, 200) + .setLocationId("loc").setServiceTime(2.0).build(); + Service s2 = Service.Builder.newInstance("2", 1).setLocationId("loc2").setServiceTime(4.0).build(); + + VehicleRoutingProblem vrp = builder.addJob(s1).addJob(s2).build(); + new VrpXMLWriter(vrp, null).write(infileName); + + VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(vrpToReadBuilder, null).read(infileName); + VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); + assertEquals(2,readVrp.getJobs().size()); + + Service s1_read = (Service) vrp.getJobs().get("1"); + + assertEquals(2, s1_read.getCapacity().getNuOfDimensions()); + assertEquals(20, s1_read.getCapacity().get(0)); + assertEquals(200, s1_read.getCapacity().get(1)); + + } + @Test public void whenWritingShipments_readingThemAgainMustReturnTheWrittenLocationIdsOfS1(){ Builder builder = VehicleRoutingProblem.Builder.newInstance(); @@ -306,6 +332,36 @@ public class VrpWriterV2Test { assertEquals(6.0,((Shipment)readVrp.getJobs().get("1")).getDeliveryCoord().getY(),0.01); } + @Test + public void whenWritingShipmentWithSeveralCapacityDimension_itShouldWriteAndReadItCorrectly(){ + Builder builder = VehicleRoutingProblem.Builder.newInstance(); + + Shipment s1 = Shipment.Builder.newInstance("1") + .setPickupCoord(Coordinate.newInstance(1, 2)).setDeliveryCoord(Coordinate.newInstance(5, 6)).setDeliveryLocation("delLoc").setPickupTimeWindow(TimeWindow.newInstance(1, 2)) + .setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).setPickupServiceTime(100).setDeliveryServiceTime(50) + .addCapacityDimension(0, 10) + .addCapacityDimension(2, 100) + .build(); + + Shipment s2 = Shipment.Builder.newInstance("2", 20).setPickupLocation("pickLocation").setDeliveryLocation("delLocation").setPickupTimeWindow(TimeWindow.newInstance(5, 6)) + .setDeliveryTimeWindow(TimeWindow.newInstance(7, 8)).build(); + + VehicleRoutingProblem vrp = builder.addJob(s1).addJob(s2).build(); + new VrpXMLWriter(vrp, null).write(infileName); + + VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(vrpToReadBuilder, null).read(infileName); + VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); + + assertEquals(3,((Shipment)readVrp.getJobs().get("1")).getCapacity().getNuOfDimensions()); + assertEquals(10,((Shipment)readVrp.getJobs().get("1")).getCapacity().get(0)); + assertEquals(0,((Shipment)readVrp.getJobs().get("1")).getCapacity().get(1)); + assertEquals(100,((Shipment)readVrp.getJobs().get("1")).getCapacity().get(2)); + + assertEquals(1,((Shipment)readVrp.getJobs().get("2")).getCapacity().getNuOfDimensions()); + assertEquals(20,((Shipment)readVrp.getJobs().get("2")).getCapacity().get(0)); + } + @Test public void whenWritingVehicleV1_itsStartLocationMustBeWrittenCorrectly(){ Builder builder = VehicleRoutingProblem.Builder.newInstance(); @@ -473,6 +529,61 @@ public class VrpWriterV2Test { assertEquals(5.0,v.getEndLocationCoordinate().getY(),0.01); } + @Test + public void whenWritingVehicleWithSeveralCapacityDimensions_itShouldBeWrittenAndRereadCorrectly(){ + Builder builder = VehicleRoutingProblem.Builder.newInstance(); + + VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("type", 200) + .addCapacityDimension(0, 100) + .addCapacityDimension(1, 1000) + .addCapacityDimension(2, 10000) + .build(); + + Vehicle v2 = VehicleImpl.Builder.newInstance("v").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(1, 2)) + .setEndLocationId("endLoc").setEndLocationCoordinate(Coordinate.newInstance(4, 5)).setType(type2).build(); + builder.addVehicle(v2); + + VehicleRoutingProblem vrp = builder.build(); + new VrpXMLWriter(vrp, null).write(infileName); + + VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(vrpToReadBuilder, null).read(infileName); + VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); + + Vehicle v = getVehicle("v",readVrp.getVehicles()); + assertEquals(3,v.getType().getCapacityDimensions().getNuOfDimensions()); + assertEquals(100,v.getType().getCapacityDimensions().get(0)); + assertEquals(1000,v.getType().getCapacityDimensions().get(1)); + assertEquals(10000,v.getType().getCapacityDimensions().get(2)); + } + + @Test + public void whenWritingVehicleWithSeveralCapacityDimensions_itShouldBeWrittenAndRereadCorrectlyV2(){ + Builder builder = VehicleRoutingProblem.Builder.newInstance(); + + VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("type", 200) + .addCapacityDimension(0, 100) + .addCapacityDimension(1, 1000) + .addCapacityDimension(10, 10000) + .build(); + + Vehicle v2 = VehicleImpl.Builder.newInstance("v").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(1, 2)) + .setEndLocationId("endLoc").setEndLocationCoordinate(Coordinate.newInstance(4, 5)).setType(type2).build(); + builder.addVehicle(v2); + + VehicleRoutingProblem vrp = builder.build(); + new VrpXMLWriter(vrp, null).write(infileName); + + VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(vrpToReadBuilder, null).read(infileName); + VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); + + Vehicle v = getVehicle("v",readVrp.getVehicles()); + assertEquals(11,v.getType().getCapacityDimensions().getNuOfDimensions()); + assertEquals(0,v.getType().getCapacityDimensions().get(9)); + assertEquals(10000,v.getType().getCapacityDimensions().get(10)); + } + private Vehicle getVehicle(String string, Collection vehicles) { for(Vehicle v : vehicles) if(string.equals(v.getId())) return v; return null; diff --git a/jsprit-core/src/test/resources/infiniteWriterV2Test.xml b/jsprit-core/src/test/resources/infiniteWriterV2Test.xml index aef90bc9..3f20b784 100644 --- a/jsprit-core/src/test/resources/infiniteWriterV2Test.xml +++ b/jsprit-core/src/test/resources/infiniteWriterV2Test.xml @@ -7,23 +7,8 @@ - v1 - vehType - - loc - - - loc - - - 0.0 - 1.7976931348623157E308 - - false - - - v2 - vehType2 + v + type startLoc @@ -41,20 +26,19 @@ - vehType + type - 20 - - - 0.0 - 1.0 - - - - - vehType2 - - 200 + 100 + 1000 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10000 0.0 @@ -63,32 +47,4 @@ - - - loc2 - - 1 - - 4.0 - - - 0.0 - 1.7976931348623157E308 - - - - - loc - - 1 - - 2.0 - - - 0.0 - 1.7976931348623157E308 - - - -