1
0
Fork 0
mirror of https://github.com/graphhopper/jsprit.git synced 2020-01-24 07:45:05 +01:00

Merge pull request #360 from HeinrichFilter/vrpxmlwrite-update

Add VrpXMLWriter method that returns OutputStream
This commit is contained in:
Stefan Schröder 2017-06-30 08:53:49 +02:00 committed by GitHub
commit 4ce3a86168
2 changed files with 167 additions and 453 deletions

View file

@ -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) {

View file

@ -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<Vehicle> vehicles) {
@ -916,14 +589,10 @@ public class VrpXMLWriterTest {
List<VehicleRoutingProblemSolution> solutions = new ArrayList<VehicleRoutingProblemSolution>();
solutions.add(solution);
new VrpXMLWriter(vrp, solutions).write(infileName);
VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance();
List<VehicleRoutingProblemSolution> solutionsToRead = new ArrayList<VehicleRoutingProblemSolution>();
new VrpXMLReader(vrpToReadBuilder, solutionsToRead).read(infileName);
List<VehicleRoutingProblemSolution> 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<VehicleRoutingProblemSolution> solutions = new ArrayList<VehicleRoutingProblemSolution>();
solutions.add(solution);
List<VehicleRoutingProblemSolution> 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<VehicleRoutingProblemSolution> writeAndRereadXmlWithSolutions(VehicleRoutingProblem vrp, List<VehicleRoutingProblemSolution> solutions) {
new VrpXMLWriter(vrp, solutions).write(infileName);
VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance();
List<VehicleRoutingProblemSolution> solutionsToRead = new ArrayList<VehicleRoutingProblemSolution>();
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;
}
}