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

added test-cases to reproduce bug #96

This commit is contained in:
oblonski 2014-05-15 10:48:44 +02:00
parent 1a67d1e20e
commit b641adf98c

View file

@ -16,19 +16,17 @@
******************************************************************************/ ******************************************************************************/
package jsprit.core.problem.vehicle; package jsprit.core.problem.vehicle;
import static org.junit.Assert.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import jsprit.core.problem.vehicle.FiniteFleetManagerFactory; import org.junit.Before;
import jsprit.core.problem.vehicle.PenaltyVehicleType; import org.junit.Test;
import jsprit.core.problem.vehicle.Vehicle;
import jsprit.core.problem.vehicle.VehicleFleetManager;
import jsprit.core.problem.vehicle.VehicleImpl;
import jsprit.core.problem.vehicle.VehicleTypeImpl;
import junit.framework.TestCase;
public class TestVehicleFleetManagerImpl extends TestCase{ public class TestVehicleFleetManagerImpl {
VehicleFleetManager fleetManager; VehicleFleetManager fleetManager;
@ -36,6 +34,7 @@ public class TestVehicleFleetManagerImpl extends TestCase{
Vehicle v2; Vehicle v2;
@Before
public void setUp(){ public void setUp(){
List<Vehicle> vehicles = new ArrayList<Vehicle>(); List<Vehicle> vehicles = new ArrayList<Vehicle>();
@ -48,17 +47,20 @@ public class TestVehicleFleetManagerImpl extends TestCase{
fleetManager = new FiniteFleetManagerFactory(vehicles).createFleetManager(); fleetManager = new FiniteFleetManagerFactory(vehicles).createFleetManager();
} }
@Test
public void testGetVehicles(){ public void testGetVehicles(){
Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles(); Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles();
assertEquals(2, vehicles.size()); assertEquals(2, vehicles.size());
} }
@Test
public void testLock(){ public void testLock(){
fleetManager.lock(v1); fleetManager.lock(v1);
Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles(); Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles();
assertEquals(1, vehicles.size()); assertEquals(1, vehicles.size());
} }
@Test
public void testLockTwice(){ public void testLockTwice(){
fleetManager.lock(v1); fleetManager.lock(v1);
Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles(); Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles();
@ -74,6 +76,7 @@ public class TestVehicleFleetManagerImpl extends TestCase{
} }
} }
@Test
public void testGetVehiclesWithout(){ public void testGetVehiclesWithout(){
Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles(v1); Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles(v1);
@ -81,6 +84,7 @@ public class TestVehicleFleetManagerImpl extends TestCase{
assertEquals(1, vehicles.size()); assertEquals(1, vehicles.size());
} }
@Test
public void testUnlock(){ public void testUnlock(){
fleetManager.lock(v1); fleetManager.lock(v1);
Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles(); Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles();
@ -90,6 +94,7 @@ public class TestVehicleFleetManagerImpl extends TestCase{
assertEquals(2, vehicles_.size()); assertEquals(2, vehicles_.size());
} }
@Test
public void testWithPenalty_whenHavingOneRegularVehicleAvailable_noPenaltyVehicleIsReturn(){ public void testWithPenalty_whenHavingOneRegularVehicleAvailable_noPenaltyVehicleIsReturn(){
Vehicle penalty4standard = VehicleImpl.Builder.newInstance("standard_penalty").setStartLocationId("loc"). Vehicle penalty4standard = VehicleImpl.Builder.newInstance("standard_penalty").setStartLocationId("loc").
setType(VehicleTypeImpl.Builder.newInstance("standard").build()).build(); setType(VehicleTypeImpl.Builder.newInstance("standard").build()).build();
@ -104,6 +109,7 @@ public class TestVehicleFleetManagerImpl extends TestCase{
assertEquals(2, availableVehicles.size()); assertEquals(2, availableVehicles.size());
} }
@Test
public void testWithPenalty_whenHavingTwoRegularVehicleAvailablePlusOnePenaltyVehicle_andOneIsLocked_returnTheOtherRegularVehicle(){ public void testWithPenalty_whenHavingTwoRegularVehicleAvailablePlusOnePenaltyVehicle_andOneIsLocked_returnTheOtherRegularVehicle(){
VehicleTypeImpl penaltyType = VehicleTypeImpl.Builder.newInstance("standard").build(); VehicleTypeImpl penaltyType = VehicleTypeImpl.Builder.newInstance("standard").build();
PenaltyVehicleType penaltyVehicleType = new PenaltyVehicleType(penaltyType); PenaltyVehicleType penaltyVehicleType = new PenaltyVehicleType(penaltyType);
@ -127,6 +133,7 @@ public class TestVehicleFleetManagerImpl extends TestCase{
assertEquals(v3, availableVehicles.iterator().next()); assertEquals(v3, availableVehicles.iterator().next());
} }
@Test
public void testWithPenalty_whenHavingNoRegularVehicleAvailable_penaltyVehicleIsReturned(){ public void testWithPenalty_whenHavingNoRegularVehicleAvailable_penaltyVehicleIsReturned(){
VehicleTypeImpl penaltyType = VehicleTypeImpl.Builder.newInstance("standard").build(); VehicleTypeImpl penaltyType = VehicleTypeImpl.Builder.newInstance("standard").build();
@ -143,4 +150,106 @@ public class TestVehicleFleetManagerImpl extends TestCase{
Collection<Vehicle> availableVehicles = fleetManager.getAvailableVehicles(); Collection<Vehicle> availableVehicles = fleetManager.getAvailableVehicles();
assertEquals(penalty4standard, availableVehicles.iterator().next()); assertEquals(penalty4standard, availableVehicles.iterator().next());
} }
@Test
public void whenAddingTwoVehiclesWithSameTypeIdAndLocation_getAvailableVehicleShouldReturnOnlyOneOfThem(){
VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("standard").build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type).build();
VehicleFleetManager fleetManager = new FiniteFleetManagerFactory(Arrays.asList(v1,v2)).createFleetManager();
Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles();
assertEquals(1,vehicles.size());
}
@Test
public void whenAddingTwoVehiclesWithSameTypeIdStartAndEndLocationAndWorkingShift_getAvailableVehicleShouldReturnOnlyOneOfThem(){
VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("standard").build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setEndLocationId("endLoc")
.setType(type).setEarliestStart(0.).setLatestArrival(10.).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setEndLocationId("endLoc")
.setType(type).setEarliestStart(0.).setLatestArrival(10.).build();
VehicleFleetManager fleetManager = new FiniteFleetManagerFactory(Arrays.asList(v1,v2)).createFleetManager();
Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles();
assertEquals(1,vehicles.size());
}
@Test
public void whenAddingTwoVehiclesWithDifferentType_getAvailableVehicleShouldReturnBoth(){
VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("standard").build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("type2").build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setEndLocationId("endLoc")
.setType(type).setEarliestStart(0.).setLatestArrival(10.).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setEndLocationId("endLoc")
.setType(type2).setEarliestStart(0.).setLatestArrival(10.).build();
VehicleFleetManager fleetManager = new FiniteFleetManagerFactory(Arrays.asList(v1,v2)).createFleetManager();
Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles();
assertEquals(2,vehicles.size());
assertTrue(vehicleInCollection(v1,vehicles));
assertTrue(vehicleInCollection(v2,vehicles));
}
@Test
public void whenAddingTwoVehiclesWithDifferentStartLocation_getAvailableVehicleShouldReturnBoth(){
VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("standard").build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("startloc").setEndLocationId("endLoc")
.setType(type).setEarliestStart(0.).setLatestArrival(10.).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setEndLocationId("endLoc")
.setType(type).setEarliestStart(0.).setLatestArrival(10.).build();
VehicleFleetManager fleetManager = new FiniteFleetManagerFactory(Arrays.asList(v1,v2)).createFleetManager();
Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles();
assertEquals(2,vehicles.size());
assertTrue(vehicleInCollection(v1,vehicles));
assertTrue(vehicleInCollection(v2,vehicles));
}
@Test
public void whenAddingTwoVehiclesWithDifferentEndLocation_getAvailableVehicleShouldReturnBoth(){
VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("standard").build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setEndLocationId("endLocation")
.setType(type).setEarliestStart(0.).setLatestArrival(10.).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setEndLocationId("endLoc")
.setType(type).setEarliestStart(0.).setLatestArrival(10.).build();
VehicleFleetManager fleetManager = new FiniteFleetManagerFactory(Arrays.asList(v1,v2)).createFleetManager();
Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles();
assertEquals(2,vehicles.size());
assertTrue(vehicleInCollection(v1,vehicles));
assertTrue(vehicleInCollection(v2,vehicles));
}
@Test
public void whenAddingTwoVehiclesWithDifferentEarliestStart_getAvailableVehicleShouldReturnBoth(){
VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("standard").build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setEndLocationId("endLoc")
.setType(type).setEarliestStart(5.).setLatestArrival(10.).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setEndLocationId("endLoc")
.setType(type).setEarliestStart(0.).setLatestArrival(10.).build();
VehicleFleetManager fleetManager = new FiniteFleetManagerFactory(Arrays.asList(v1,v2)).createFleetManager();
Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles();
assertEquals(2,vehicles.size());
assertTrue(vehicleInCollection(v1,vehicles));
assertTrue(vehicleInCollection(v2,vehicles));
}
@Test
public void whenAddingTwoVehiclesWithDifferentLatestArr_getAvailableVehicleShouldReturnBoth(){
VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("standard").build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setEndLocationId("endLoc")
.setType(type).setEarliestStart(0.).setLatestArrival(20.).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setEndLocationId("endLoc")
.setType(type).setEarliestStart(0.).setLatestArrival(10.).build();
VehicleFleetManager fleetManager = new FiniteFleetManagerFactory(Arrays.asList(v1,v2)).createFleetManager();
Collection<Vehicle> vehicles = fleetManager.getAvailableVehicles();
assertEquals(2,vehicles.size());
assertTrue(vehicleInCollection(v1,vehicles));
assertTrue(vehicleInCollection(v2,vehicles));
}
private boolean vehicleInCollection(Vehicle v, Collection<Vehicle> vehicles) {
for(Vehicle veh : vehicles){
if(veh == v) return true;
}
return false;
}
} }