diff --git a/jsprit-io/src/main/java/com/graphhopper/jsprit/io/problem/VrpXMLWriter.java b/jsprit-io/src/main/java/com/graphhopper/jsprit/io/problem/VrpXMLWriter.java index 024d4958..57ba77f2 100644 --- a/jsprit-io/src/main/java/com/graphhopper/jsprit/io/problem/VrpXMLWriter.java +++ b/jsprit-io/src/main/java/com/graphhopper/jsprit/io/problem/VrpXMLWriter.java @@ -41,9 +41,7 @@ import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; +import java.io.*; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -94,8 +92,36 @@ public class VrpXMLWriter { public void write(String filename) { if (!filename.endsWith(".xml")) filename += ".xml"; log.info("write vrp: " + filename); + XMLConf xmlConfig = createXMLConfiguration(); + + try { + xmlConfig.setFileName(filename); + Writer out = new FileWriter(filename); + XMLSerializer serializer = new XMLSerializer(out, createOutputFormat()); + serializer.serialize(xmlConfig.getDocument()); + out.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public OutputStream write() { + XMLConf xmlConfig = createXMLConfiguration(); + OutputStream out = new ByteArrayOutputStream(); + + try { + XMLSerializer serializer = new XMLSerializer(out, createOutputFormat()); + serializer.serialize(xmlConfig.getDocument()); + out.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return out; + } + + private XMLConf createXMLConfiguration() { XMLConf xmlConfig = new XMLConf(); - xmlConfig.setFileName(filename); xmlConfig.setRootElementName("problem"); xmlConfig.setAttributeSplittingDisabled(true); xmlConfig.setDelimiterParsingDisabled(true); @@ -123,10 +149,6 @@ public class VrpXMLWriter { writeSolutions(xmlConfig); - OutputFormat format = new OutputFormat(); - format.setIndenting(true); - format.setIndent(5); - try { Document document = xmlConfig.createDoc(); @@ -138,17 +160,14 @@ public class VrpXMLWriter { } catch (ConfigurationException e) { throw new RuntimeException(e); } + return xmlConfig; + } - try { - Writer out = new FileWriter(filename); - XMLSerializer serializer = new XMLSerializer(out, format); - serializer.serialize(xmlConfig.getDocument()); - out.close(); - } catch (IOException e) { - throw new RuntimeException(e); - } - - + private OutputFormat createOutputFormat() { + OutputFormat format = new OutputFormat(); + format.setIndenting(true); + format.setIndent(5); + return format; } private void writeInitialRoutes(XMLConf xmlConfig) { diff --git a/jsprit-io/src/test/java/com/graphhopper/jsprit/io/problem/VrpXMLWriterTest.java b/jsprit-io/src/test/java/com/graphhopper/jsprit/io/problem/VrpXMLWriterTest.java index e75e1ba8..54ea122f 100644 --- a/jsprit-io/src/test/java/com/graphhopper/jsprit/io/problem/VrpXMLWriterTest.java +++ b/jsprit-io/src/test/java/com/graphhopper/jsprit/io/problem/VrpXMLWriterTest.java @@ -34,6 +34,10 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -61,58 +65,24 @@ public class VrpXMLWriterTest { } @Test - public void whenWritingFiniteVrp_itWritesCorrectly() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + public void whenWritingFiniteVrp_itWritesAndReadsCorrectly() { + VehicleRoutingProblem.Builder builder = twoVehicleTypesAndImpls(); builder.setFleetSize(VehicleRoutingProblem.FleetSize.FINITE); - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); - VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); - VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocation(TestUtils.loc("loc")).setType(type1).build(); - VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(TestUtils.loc("loc")).setType(type2).build(); - builder.addVehicle(v1); - builder.addVehicle(v2); + VehicleRoutingProblem vrp = builder.build(); - new VrpXMLWriter(vrp, null).write(infileName); + writeAndRereadXml(vrp); } - @Test - public void t() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - builder.setFleetSize(VehicleRoutingProblem.FleetSize.FINITE); - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); - VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); - VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocation(TestUtils.loc("loc")).setType(type1).build(); - VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(TestUtils.loc("loc")).setType(type2).build(); - builder.addVehicle(v1); - 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); - } @Test public void whenWritingServices_itWritesThemCorrectly() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); - VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); - VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocation(TestUtils.loc("loc")).setType(type1).build(); - VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(TestUtils.loc("loc")).setType(type2).build(); - - builder.addVehicle(v1); - builder.addVehicle(v2); - + VehicleRoutingProblem.Builder builder = twoVehicleTypesAndImpls(); Service s1 = Service.Builder.newInstance("1").addSizeDimension(0, 1).setLocation(TestUtils.loc("loc")).setServiceTime(2.0).build(); Service s2 = Service.Builder.newInstance("2").addSizeDimension(0, 1).setLocation(TestUtils.loc("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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); assertEquals(2, readVrp.getJobs().size()); Service s1_read = (Service) vrp.getJobs().get("1"); @@ -128,11 +98,7 @@ public class VrpXMLWriterTest { Service s1 = Service.Builder.newInstance("1").setName("cleaning").addSizeDimension(0, 1).setLocation(TestUtils.loc("loc")).setServiceTime(2.0).build(); VehicleRoutingProblem vrp = builder.addJob(s1).build(); - new VrpXMLWriter(vrp, null).write(infileName); - - VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); - new VrpXMLReader(vrpToReadBuilder, null).read(infileName); - VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); Service s1_read = (Service) readVrp.getJobs().get("1"); assertTrue(s1_read.getName().equals("cleaning")); } @@ -146,11 +112,7 @@ public class VrpXMLWriterTest { .setDeliveryLocation(TestUtils.loc("del")).build(); VehicleRoutingProblem vrp = builder.addJob(s1).build(); - new VrpXMLWriter(vrp, null).write(infileName); - - VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); - new VrpXMLReader(vrpToReadBuilder, null).read(infileName); - VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); Shipment s1_read = (Shipment) readVrp.getJobs().get("1"); assertTrue(s1_read.getName().equals("cleaning")); Assert.assertEquals(1, s1_read.getPickupLocation().getIndex()); @@ -167,32 +129,20 @@ public class VrpXMLWriterTest { Service s2 = Service.Builder.newInstance("2").addSizeDimension(0, 1).setLocation(TestUtils.loc("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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); assertEquals(2, readVrp.getJobs().size()); Service s1_read = (Service) vrp.getJobs().get("1"); - Assert.assertEquals(2, s1_read.getSize().getNuOfDimensions()); - Assert.assertEquals(20, s1_read.getSize().get(0)); - Assert.assertEquals(200, s1_read.getSize().get(1)); + assertEquals(2, s1_read.getSize().getNuOfDimensions()); + assertEquals(20, s1_read.getSize().get(0)); + assertEquals(200, s1_read.getSize().get(1)); } @Test public void whenWritingShipments_readingThemAgainMustReturnTheWrittenLocationIdsOfS1() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); - VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); - VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocation(TestUtils.loc("loc")).setType(type1).build(); - VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(TestUtils.loc("loc")).setType(type2).build(); - - builder.addVehicle(v1); - builder.addVehicle(v2); + VehicleRoutingProblem.Builder builder = twoVehicleTypesAndImpls(); Shipment s1 = Shipment.Builder.newInstance("1").addSizeDimension(0, 10) .setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()) @@ -205,29 +155,17 @@ public class VrpXMLWriterTest { 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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); assertEquals(2, readVrp.getJobs().size()); - Assert.assertEquals("pickLoc", ((Shipment) readVrp.getJobs().get("1")).getPickupLocation().getId()); - Assert.assertEquals("delLoc", ((Shipment) readVrp.getJobs().get("1")).getDeliveryLocation().getId()); + assertEquals("pickLoc", ((Shipment) readVrp.getJobs().get("1")).getPickupLocation().getId()); + assertEquals("delLoc", ((Shipment) readVrp.getJobs().get("1")).getDeliveryLocation().getId()); } @Test public void whenWritingShipments_readingThemAgainMustReturnTheWrittenPickupTimeWindowsOfS1() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); - VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); - VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocation(TestUtils.loc("loc")).setType(type1).build(); - VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(TestUtils.loc("loc")).setType(type2).build(); - - builder.addVehicle(v1); - builder.addVehicle(v2); + VehicleRoutingProblem.Builder builder = twoVehicleTypesAndImpls(); Shipment s1 = Shipment.Builder.newInstance("1").addSizeDimension(0, 10) .setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()) @@ -240,30 +178,18 @@ public class VrpXMLWriterTest { 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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); assertEquals(2, readVrp.getJobs().size()); - Assert.assertEquals(1.0, ((Shipment) readVrp.getJobs().get("1")).getPickupTimeWindow().getStart(), 0.01); - Assert.assertEquals(2.0, ((Shipment) readVrp.getJobs().get("1")).getPickupTimeWindow().getEnd(), 0.01); + assertEquals(1.0, ((Shipment) readVrp.getJobs().get("1")).getPickupTimeWindow().getStart(), 0.01); + assertEquals(2.0, ((Shipment) readVrp.getJobs().get("1")).getPickupTimeWindow().getEnd(), 0.01); } @Test public void whenWritingShipments_readingThemAgainMustReturnTheWrittenDeliveryTimeWindowsOfS1() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); - VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); - VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocation(TestUtils.loc("loc")).setType(type1).build(); - VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(TestUtils.loc("loc")).setType(type2).build(); - - builder.addVehicle(v1); - builder.addVehicle(v2); + VehicleRoutingProblem.Builder builder = twoVehicleTypesAndImpls(); Shipment s1 = Shipment.Builder.newInstance("1").addSizeDimension(0, 10) .setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()) @@ -276,29 +202,17 @@ public class VrpXMLWriterTest { 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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); assertEquals(2, readVrp.getJobs().size()); - Assert.assertEquals(3.0, ((Shipment) readVrp.getJobs().get("1")).getDeliveryTimeWindow().getStart(), 0.01); - Assert.assertEquals(4.0, ((Shipment) readVrp.getJobs().get("1")).getDeliveryTimeWindow().getEnd(), 0.01); + assertEquals(3.0, ((Shipment) readVrp.getJobs().get("1")).getDeliveryTimeWindow().getStart(), 0.01); + assertEquals(4.0, ((Shipment) readVrp.getJobs().get("1")).getDeliveryTimeWindow().getEnd(), 0.01); } @Test public void whenWritingShipments_readingThemAgainMustReturnTheWrittenDeliveryServiceTimeOfS1() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); - VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); - VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocation(TestUtils.loc("loc")).setType(type1).build(); - VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(TestUtils.loc("loc")).setType(type2).build(); - - builder.addVehicle(v1); - builder.addVehicle(v2); + VehicleRoutingProblem.Builder builder = twoVehicleTypesAndImpls(); Shipment s1 = Shipment.Builder.newInstance("1").addSizeDimension(0, 10) .setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()) @@ -311,11 +225,7 @@ public class VrpXMLWriterTest { 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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); assertEquals(2, readVrp.getJobs().size()); assertEquals(100.0, ((Shipment) readVrp.getJobs().get("1")).getPickupServiceTime(), 0.01); @@ -325,15 +235,7 @@ public class VrpXMLWriterTest { @Test public void whenWritingShipments_readingThemAgainMustReturnTheWrittenLocationIdOfS1() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); - VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); - VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocation(TestUtils.loc("loc")).setType(type1).build(); - VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(TestUtils.loc("loc")).setType(type2).build(); - - builder.addVehicle(v1); - builder.addVehicle(v2); + VehicleRoutingProblem.Builder builder = twoVehicleTypesAndImpls(); Shipment s1 = Shipment.Builder.newInstance("1").addSizeDimension(0, 10) .setPickupLocation(TestUtils.loc(Coordinate.newInstance(1, 2))).setDeliveryLocation(TestUtils.loc("delLoc")).setPickupTimeWindow(TimeWindow.newInstance(1, 2)) @@ -345,18 +247,14 @@ public class VrpXMLWriterTest { 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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); assertEquals(2, readVrp.getJobs().size()); - Assert.assertEquals("[x=1.0][y=2.0]", ((Shipment) readVrp.getJobs().get("1")).getPickupLocation().getId()); + assertEquals("[x=1.0][y=2.0]", ((Shipment) readVrp.getJobs().get("1")).getPickupLocation().getId()); } @Test - public void whenWritingVehicles_vehShouldHave2Skills() { + public void whenWritingVehicles_vehShouldHave3Skills() { VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleImpl v = VehicleImpl.Builder.newInstance("v1").addSkill("SKILL5").addSkill("skill1").addSkill("Skill2") @@ -364,70 +262,12 @@ public class VrpXMLWriterTest { builder.addVehicle(v); 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 veh1 = getVehicle("v1", readVrp); - - Assert.assertEquals(3, veh1.getSkills().values().size()); - } - - @Test - public void whenWritingVehicles_vehShouldContain_skill5() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); - VehicleImpl v = VehicleImpl.Builder.newInstance("v1").addSkill("SKILL5").addSkill("skill1").addSkill("Skill2") - .setStartLocation(TestUtils.loc("loc")).setType(type1).build(); - builder.addVehicle(v); - - 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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); Vehicle veh1 = getVehicle("v1", readVrp); + assertEquals(3, veh1.getSkills().values().size()); assertTrue(veh1.getSkills().containsSkill("skill5")); - } - - @Test - public void whenWritingVehicles_vehShouldContain_skill1() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); - VehicleImpl v = VehicleImpl.Builder.newInstance("v1").addSkill("SKILL5").addSkill("skill1").addSkill("Skill2") - .setStartLocation(TestUtils.loc("loc")).setType(type1).build(); - builder.addVehicle(v); - - 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 veh1 = getVehicle("v1", readVrp); - assertTrue(veh1.getSkills().containsSkill("skill1")); - } - - @Test - public void whenWritingVehicles_vehShouldContain_skill2() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); - VehicleImpl v = VehicleImpl.Builder.newInstance("v1").addSkill("SKILL5").addSkill("skill1").addSkill("Skill2") - .setStartLocation(TestUtils.loc("loc")).setType(type1).build(); - builder.addVehicle(v); - - 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 veh1 = getVehicle("v1", readVrp); - assertTrue(veh1.getSkills().containsSkill("skill2")); } @@ -439,14 +279,10 @@ public class VrpXMLWriterTest { builder.addVehicle(v); 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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); Vehicle veh = getVehicle("v1", readVrp); - Assert.assertEquals(0, veh.getSkills().values().size()); + assertEquals(0, veh.getSkills().values().size()); } private Vehicle getVehicle(String v1, VehicleRoutingProblem readVrp) { @@ -468,89 +304,17 @@ public class VrpXMLWriterTest { .setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).setPickupServiceTime(100).setDeliveryServiceTime(50).build(); VehicleRoutingProblem vrp = builder.addJob(s).build(); - new VrpXMLWriter(vrp, null).write(infileName); - - VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); - new VrpXMLReader(vrpToReadBuilder, null).read(infileName); - VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); - - Assert.assertEquals(3, readVrp.getJobs().get("1").getRequiredSkills().values().size()); - } - - @Test - public void whenWritingShipments_shipmentShouldContain_skill1() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - - Shipment s = Shipment.Builder.newInstance("1").addRequiredSkill("skill1").addRequiredSkill("skill2").addRequiredSkill("skill3") - .addSizeDimension(0, 10) - .setPickupLocation(TestUtils.loc(Coordinate.newInstance(1, 2))) - .setDeliveryLocation(TestUtils.loc("delLoc", Coordinate.newInstance(5, 6))) - .setPickupTimeWindow(TimeWindow.newInstance(1, 2)) - .setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).setPickupServiceTime(100).setDeliveryServiceTime(50).build(); - - VehicleRoutingProblem vrp = builder.addJob(s).build(); - new VrpXMLWriter(vrp, null).write(infileName); - - VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); - new VrpXMLReader(vrpToReadBuilder, null).read(infileName); - VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); + assertEquals(3, readVrp.getJobs().get("1").getRequiredSkills().values().size()); assertTrue(readVrp.getJobs().get("1").getRequiredSkills().containsSkill("skill1")); - } - - @Test - public void whenWritingShipments_shipmentShouldContain_skill2() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - - Shipment s = Shipment.Builder.newInstance("1").addRequiredSkill("skill1").addRequiredSkill("Skill2").addRequiredSkill("skill3") - .addSizeDimension(0, 10) - .setPickupLocation(TestUtils.loc(Coordinate.newInstance(1, 2))) - .setDeliveryLocation(TestUtils.loc("delLoc", Coordinate.newInstance(5, 6))) - .setPickupTimeWindow(TimeWindow.newInstance(1, 2)) - .setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).setPickupServiceTime(100).setDeliveryServiceTime(50).build(); - - VehicleRoutingProblem vrp = builder.addJob(s).build(); - new VrpXMLWriter(vrp, null).write(infileName); - - VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); - new VrpXMLReader(vrpToReadBuilder, null).read(infileName); - VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); - assertTrue(readVrp.getJobs().get("1").getRequiredSkills().containsSkill("skill2")); - } - - @Test - public void whenWritingShipments_shipmentShouldContain_skill3() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - - Shipment s = Shipment.Builder.newInstance("1").addRequiredSkill("skill1").addRequiredSkill("Skill2").addRequiredSkill("skill3") - .addSizeDimension(0, 10) - .setPickupLocation(TestUtils.loc(Coordinate.newInstance(1, 2))) - .setDeliveryLocation(TestUtils.loc("delLoc", Coordinate.newInstance(5, 6))) - .setPickupTimeWindow(TimeWindow.newInstance(1, 2)) - .setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).setPickupServiceTime(100).setDeliveryServiceTime(50).build(); - - VehicleRoutingProblem vrp = builder.addJob(s).build(); - new VrpXMLWriter(vrp, null).write(infileName); - - VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); - new VrpXMLReader(vrpToReadBuilder, null).read(infileName); - VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); - assertTrue(readVrp.getJobs().get("1").getRequiredSkills().containsSkill("skill3")); } @Test public void whenWritingShipments_readingThemAgainMustReturnTheWrittenLocationCoordinateOfS1() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); - VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); - VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocation(TestUtils.loc("loc")).setType(type1).build(); - VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(TestUtils.loc("loc")).setType(type2).build(); - - builder.addVehicle(v1); - builder.addVehicle(v2); + VehicleRoutingProblem.Builder builder = twoVehicleTypesAndImpls(); Shipment s1 = Shipment.Builder.newInstance("1").addSizeDimension(0, 10).setPickupLocation(TestUtils.loc(Coordinate.newInstance(1, 2))) .setDeliveryLocation(TestUtils.loc("delLoc", Coordinate.newInstance(5, 6))) @@ -564,18 +328,14 @@ public class VrpXMLWriterTest { 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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); assertEquals(2, readVrp.getJobs().size()); - Assert.assertEquals(1.0, ((Shipment) readVrp.getJobs().get("1")).getPickupLocation().getCoordinate().getX(), 0.01); - Assert.assertEquals(2.0, ((Shipment) readVrp.getJobs().get("1")).getPickupLocation().getCoordinate().getY(), 0.01); + assertEquals(1.0, ((Shipment) readVrp.getJobs().get("1")).getPickupLocation().getCoordinate().getX(), 0.01); + assertEquals(2.0, ((Shipment) readVrp.getJobs().get("1")).getPickupLocation().getCoordinate().getY(), 0.01); - Assert.assertEquals(5.0, ((Shipment) readVrp.getJobs().get("1")).getDeliveryLocation().getCoordinate().getX(), 0.01); - Assert.assertEquals(6.0, ((Shipment) readVrp.getJobs().get("1")).getDeliveryLocation().getCoordinate().getY(), 0.01); + assertEquals(5.0, ((Shipment) readVrp.getJobs().get("1")).getDeliveryLocation().getCoordinate().getX(), 0.01); + assertEquals(6.0, ((Shipment) readVrp.getJobs().get("1")).getDeliveryLocation().getCoordinate().getY(), 0.01); } @Test @@ -597,23 +357,34 @@ public class VrpXMLWriterTest { .setDeliveryTimeWindow(TimeWindow.newInstance(7, 8)).build(); VehicleRoutingProblem vrp = builder.addJob(s1).addJob(s2).build(); - new VrpXMLWriter(vrp, null).write(infileName); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); - VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); - new VrpXMLReader(vrpToReadBuilder, null).read(infileName); - VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); + assertEquals(3, (readVrp.getJobs().get("1")).getSize().getNuOfDimensions()); + assertEquals(10, (readVrp.getJobs().get("1")).getSize().get(0)); + assertEquals(0, (readVrp.getJobs().get("1")).getSize().get(1)); + assertEquals(100, (readVrp.getJobs().get("1")).getSize().get(2)); - Assert.assertEquals(3, (readVrp.getJobs().get("1")).getSize().getNuOfDimensions()); - Assert.assertEquals(10, (readVrp.getJobs().get("1")).getSize().get(0)); - Assert.assertEquals(0, (readVrp.getJobs().get("1")).getSize().get(1)); - Assert.assertEquals(100, (readVrp.getJobs().get("1")).getSize().get(2)); - - Assert.assertEquals(1, (readVrp.getJobs().get("2")).getSize().getNuOfDimensions()); - Assert.assertEquals(20, (readVrp.getJobs().get("2")).getSize().get(0)); + assertEquals(1, (readVrp.getJobs().get("2")).getSize().getNuOfDimensions()); + assertEquals(20, (readVrp.getJobs().get("2")).getSize().get(0)); } @Test public void whenWritingVehicleV1_itsStartLocationMustBeWrittenCorrectly() { + VehicleRoutingProblem.Builder builder = twoVehicleTypesAndImpls(); + + Service s1 = Service.Builder.newInstance("1").addSizeDimension(0, 1).setLocation(TestUtils.loc("loc")).setServiceTime(2.0).build(); + Service s2 = Service.Builder.newInstance("2").addSizeDimension(0, 1).setLocation(TestUtils.loc("loc2")).setServiceTime(4.0).build(); + + VehicleRoutingProblem vrp = builder.addJob(s1).addJob(s2).build(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); + + Vehicle v = getVehicle("v1", readVrp.getVehicles()); + assertEquals("loc", v.getStartLocation().getId()); + assertEquals("loc", v.getEndLocation().getId()); + + } + + private VehicleRoutingProblem.Builder twoVehicleTypesAndImpls() { VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); @@ -623,74 +394,27 @@ public class VrpXMLWriterTest { builder.addVehicle(v1); builder.addVehicle(v2); - - Service s1 = Service.Builder.newInstance("1").addSizeDimension(0, 1).setLocation(TestUtils.loc("loc")).setServiceTime(2.0).build(); - Service s2 = Service.Builder.newInstance("2").addSizeDimension(0, 1).setLocation(TestUtils.loc("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(); - - Vehicle v = getVehicle("v1", readVrp.getVehicles()); - Assert.assertEquals("loc", v.getStartLocation().getId()); - Assert.assertEquals("loc", v.getEndLocation().getId()); - + return builder; } @Test - public void whenWritingService_itShouldHaveTheCorrectNuSkills() { + public void whenWritingService_itShouldContain_bothSkills() { VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - Service s = Service.Builder.newInstance("1").addRequiredSkill("sKill1").addRequiredSkill("skill2").addSizeDimension(0, 1) - .setLocation(TestUtils.loc("loc")).setServiceTime(2.0).build(); + //skill names are case-insensitive + Service s = Service.Builder.newInstance("1").addRequiredSkill("skill1").addRequiredSkill("SKILL2").addSizeDimension(0, 1) + .setLocation(TestUtils.loc("loc")).setServiceTime(2.0).build(); VehicleRoutingProblem vrp = builder.addJob(s).build(); - new VrpXMLWriter(vrp, null).write(infileName); - VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); - new VrpXMLReader(vrpToReadBuilder, null).read(infileName); - VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); - - Assert.assertEquals(2, readVrp.getJobs().get("1").getRequiredSkills().values().size()); - } - - @Test - public void whenWritingService_itShouldContain_skill1() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - - Service s = Service.Builder.newInstance("1").addRequiredSkill("sKill1").addRequiredSkill("skill2").addSizeDimension(0, 1) - .setLocation(TestUtils.loc("loc")).setServiceTime(2.0).build(); - - VehicleRoutingProblem vrp = builder.addJob(s).build(); - new VrpXMLWriter(vrp, null).write(infileName); - - VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); - new VrpXMLReader(vrpToReadBuilder, null).read(infileName); - VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); + assertEquals(2, readVrp.getJobs().get("1").getRequiredSkills().values().size()); assertTrue(readVrp.getJobs().get("1").getRequiredSkills().containsSkill("skill1")); - } - - @Test - public void whenWritingService_itShouldContain_skill2() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - - Service s = Service.Builder.newInstance("1").addRequiredSkill("sKill1").addRequiredSkill("skill2").addSizeDimension(0, 1) - .setLocation(TestUtils.loc("loc")).setServiceTime(2.0).build(); - - VehicleRoutingProblem vrp = builder.addJob(s).build(); - new VrpXMLWriter(vrp, null).write(infileName); - - VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); - new VrpXMLReader(vrpToReadBuilder, null).read(infileName); - VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); - assertTrue(readVrp.getJobs().get("1").getRequiredSkills().containsSkill("skill2")); } + @Test public void whenWritingVehicleV1_itDoesNotReturnToDepotMustBeWrittenCorrectly() { VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); @@ -708,11 +432,7 @@ public class VrpXMLWriterTest { Service s2 = Service.Builder.newInstance("2").addSizeDimension(0, 1).setLocation(TestUtils.loc("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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); Vehicle v = getVehicle("v1", readVrp.getVehicles()); assertFalse(v.isReturnToDepot()); @@ -734,11 +454,7 @@ public class VrpXMLWriterTest { Service s2 = Service.Builder.newInstance("2").addSizeDimension(0, 1).setLocation(TestUtils.loc("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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); Vehicle v = getVehicle("v1", readVrp.getVehicles()); assertEquals("vehType", v.getType().getTypeId()); @@ -760,15 +476,11 @@ public class VrpXMLWriterTest { Service s2 = Service.Builder.newInstance("2").addSizeDimension(0, 1).setLocation(TestUtils.loc("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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); Vehicle v = getVehicle("v2", readVrp.getVehicles()); assertEquals("vehType2", v.getType().getTypeId()); - Assert.assertEquals(200, v.getType().getCapacityDimensions().get(0)); + assertEquals(200, v.getType().getCapacityDimensions().get(0)); } @@ -776,35 +488,6 @@ public class VrpXMLWriterTest { public void whenWritingVehicleV2_readingItsLocationsAgainReturnsCorrectLocations() { VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); - VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); - VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setReturnToDepot(false).setStartLocation(TestUtils.loc("loc")).setType(type1).build(); - VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2") - .setStartLocation(TestUtils.loc("startLoc", Coordinate.newInstance(1, 2))) - .setEndLocation(TestUtils.loc("endLoc", Coordinate.newInstance(4, 5))).setType(type2).build(); - - builder.addVehicle(v1); - builder.addVehicle(v2); - - Service s1 = Service.Builder.newInstance("1").addSizeDimension(0, 1).setLocation(TestUtils.loc("loc")).setServiceTime(2.0).build(); - Service s2 = Service.Builder.newInstance("2").addSizeDimension(0, 1).setLocation(TestUtils.loc("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(); - - Vehicle v = getVehicle("v2", readVrp.getVehicles()); - Assert.assertEquals("startLoc", v.getStartLocation().getId()); - Assert.assertEquals("endLoc", v.getEndLocation().getId()); - } - - @Test - public void whenWritingVehicleV2_readingItsLocationsCoordsAgainReturnsCorrectLocationsCoords() { - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setReturnToDepot(false) @@ -820,20 +503,18 @@ public class VrpXMLWriterTest { Service s2 = Service.Builder.newInstance("2").addSizeDimension(0, 1).setLocation(TestUtils.loc("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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); Vehicle v = getVehicle("v2", readVrp.getVehicles()); - Assert.assertEquals(1.0, v.getStartLocation().getCoordinate().getX(), 0.01); - Assert.assertEquals(2.0, v.getStartLocation().getCoordinate().getY(), 0.01); - - Assert.assertEquals(4.0, v.getEndLocation().getCoordinate().getX(), 0.01); - Assert.assertEquals(5.0, v.getEndLocation().getCoordinate().getY(), 0.01); + assertEquals("startLoc", v.getStartLocation().getId()); + assertEquals("endLoc", v.getEndLocation().getId()); + assertEquals(1.0, v.getStartLocation().getCoordinate().getX(), 0.01); + assertEquals(2.0, v.getStartLocation().getCoordinate().getY(), 0.01); + assertEquals(4.0, v.getEndLocation().getCoordinate().getX(), 0.01); + assertEquals(5.0, v.getEndLocation().getCoordinate().getY(), 0.01); } + @Test public void whenWritingVehicleWithSeveralCapacityDimensions_itShouldBeWrittenAndRereadCorrectly() { VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); @@ -850,17 +531,13 @@ public class VrpXMLWriterTest { 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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); Vehicle v = getVehicle("v", readVrp.getVehicles()); - Assert.assertEquals(3, v.getType().getCapacityDimensions().getNuOfDimensions()); - Assert.assertEquals(100, v.getType().getCapacityDimensions().get(0)); - Assert.assertEquals(1000, v.getType().getCapacityDimensions().get(1)); - Assert.assertEquals(10000, v.getType().getCapacityDimensions().get(2)); + 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 @@ -879,16 +556,12 @@ public class VrpXMLWriterTest { 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(); + VehicleRoutingProblem readVrp = writeAndRereadXml(vrp); Vehicle v = getVehicle("v", readVrp.getVehicles()); - Assert.assertEquals(11, v.getType().getCapacityDimensions().getNuOfDimensions()); - Assert.assertEquals(0, v.getType().getCapacityDimensions().get(9)); - Assert.assertEquals(10000, v.getType().getCapacityDimensions().get(10)); + 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) { @@ -916,14 +589,10 @@ public class VrpXMLWriterTest { List solutions = new ArrayList(); solutions.add(solution); - new VrpXMLWriter(vrp, solutions).write(infileName); - - VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); - List solutionsToRead = new ArrayList(); - new VrpXMLReader(vrpToReadBuilder, solutionsToRead).read(infileName); + List solutionsToRead = writeAndRereadXmlWithSolutions(vrp, solutions); assertEquals(1, solutionsToRead.size()); - Assert.assertEquals(10., Solutions.bestOf(solutionsToRead).getCost(), 0.01); + assertEquals(10., Solutions.bestOf(solutionsToRead).getCost(), 0.01); assertTrue(Solutions.bestOf(solutionsToRead).getUnassignedJobs().isEmpty()); } @@ -948,16 +617,42 @@ public class VrpXMLWriterTest { List solutions = new ArrayList(); solutions.add(solution); + List solutionsToRead = writeAndRereadXmlWithSolutions(vrp, solutions); + + assertEquals(1, solutionsToRead.size()); + assertEquals(10., Solutions.bestOf(solutionsToRead).getCost(), 0.01); + assertEquals(1, Solutions.bestOf(solutionsToRead).getUnassignedJobs().size()); + assertEquals("2", Solutions.bestOf(solutionsToRead).getUnassignedJobs().iterator().next().getId()); + } + + @Test + public void outputStreamAndFileContentsAreEqual() throws IOException { + VehicleRoutingProblem.Builder builder = twoVehicleTypesAndImpls(); + VehicleRoutingProblem vrp = builder.build(); + + new VrpXMLWriter(vrp, null).write(infileName); + String outputStringFromFile = new String(Files.readAllBytes(Paths.get(infileName))); + String outputStringFromStream = new VrpXMLWriter(vrp, null).write().toString(); + + assertEquals(outputStringFromFile, outputStringFromStream); + + } + + private VehicleRoutingProblem writeAndRereadXml(VehicleRoutingProblem vrp) { + new VrpXMLWriter(vrp, null).write(infileName); + + VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(vrpToReadBuilder, null).read(infileName); + return vrpToReadBuilder.build(); + } + + private List writeAndRereadXmlWithSolutions(VehicleRoutingProblem vrp, List solutions) { new VrpXMLWriter(vrp, solutions).write(infileName); VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); List solutionsToRead = new ArrayList(); new VrpXMLReader(vrpToReadBuilder, solutionsToRead).read(infileName); - - assertEquals(1, solutionsToRead.size()); - Assert.assertEquals(10., Solutions.bestOf(solutionsToRead).getCost(), 0.01); - Assert.assertEquals(1, Solutions.bestOf(solutionsToRead).getUnassignedJobs().size()); - Assert.assertEquals("2", Solutions.bestOf(solutionsToRead).getUnassignedJobs().iterator().next().getId()); + return solutionsToRead; } }