diff --git a/jsprit-core/src/test/java/jsprit/core/problem/vehicle/TestVehicleFleetManagerImpl.java b/jsprit-core/src/test/java/jsprit/core/problem/vehicle/TestVehicleFleetManagerImpl.java index e4371c1b..67c1fd2a 100644 --- a/jsprit-core/src/test/java/jsprit/core/problem/vehicle/TestVehicleFleetManagerImpl.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/vehicle/TestVehicleFleetManagerImpl.java @@ -16,19 +16,17 @@ ******************************************************************************/ package jsprit.core.problem.vehicle; +import static org.junit.Assert.*; + import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.List; -import jsprit.core.problem.vehicle.FiniteFleetManagerFactory; -import jsprit.core.problem.vehicle.PenaltyVehicleType; -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; +import org.junit.Before; +import org.junit.Test; -public class TestVehicleFleetManagerImpl extends TestCase{ +public class TestVehicleFleetManagerImpl { VehicleFleetManager fleetManager; @@ -36,6 +34,7 @@ public class TestVehicleFleetManagerImpl extends TestCase{ Vehicle v2; + @Before public void setUp(){ List vehicles = new ArrayList(); @@ -48,17 +47,20 @@ public class TestVehicleFleetManagerImpl extends TestCase{ fleetManager = new FiniteFleetManagerFactory(vehicles).createFleetManager(); } + @Test public void testGetVehicles(){ Collection vehicles = fleetManager.getAvailableVehicles(); assertEquals(2, vehicles.size()); } + @Test public void testLock(){ fleetManager.lock(v1); Collection vehicles = fleetManager.getAvailableVehicles(); assertEquals(1, vehicles.size()); } + @Test public void testLockTwice(){ fleetManager.lock(v1); Collection vehicles = fleetManager.getAvailableVehicles(); @@ -74,6 +76,7 @@ public class TestVehicleFleetManagerImpl extends TestCase{ } } + @Test public void testGetVehiclesWithout(){ Collection vehicles = fleetManager.getAvailableVehicles(v1); @@ -81,6 +84,7 @@ public class TestVehicleFleetManagerImpl extends TestCase{ assertEquals(1, vehicles.size()); } + @Test public void testUnlock(){ fleetManager.lock(v1); Collection vehicles = fleetManager.getAvailableVehicles(); @@ -90,6 +94,7 @@ public class TestVehicleFleetManagerImpl extends TestCase{ assertEquals(2, vehicles_.size()); } + @Test public void testWithPenalty_whenHavingOneRegularVehicleAvailable_noPenaltyVehicleIsReturn(){ Vehicle penalty4standard = VehicleImpl.Builder.newInstance("standard_penalty").setStartLocationId("loc"). setType(VehicleTypeImpl.Builder.newInstance("standard").build()).build(); @@ -104,6 +109,7 @@ public class TestVehicleFleetManagerImpl extends TestCase{ assertEquals(2, availableVehicles.size()); } + @Test public void testWithPenalty_whenHavingTwoRegularVehicleAvailablePlusOnePenaltyVehicle_andOneIsLocked_returnTheOtherRegularVehicle(){ VehicleTypeImpl penaltyType = VehicleTypeImpl.Builder.newInstance("standard").build(); PenaltyVehicleType penaltyVehicleType = new PenaltyVehicleType(penaltyType); @@ -127,6 +133,7 @@ public class TestVehicleFleetManagerImpl extends TestCase{ assertEquals(v3, availableVehicles.iterator().next()); } + @Test public void testWithPenalty_whenHavingNoRegularVehicleAvailable_penaltyVehicleIsReturned(){ VehicleTypeImpl penaltyType = VehicleTypeImpl.Builder.newInstance("standard").build(); @@ -143,4 +150,106 @@ public class TestVehicleFleetManagerImpl extends TestCase{ Collection availableVehicles = fleetManager.getAvailableVehicles(); 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 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 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 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 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 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 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 vehicles = fleetManager.getAvailableVehicles(); + assertEquals(2,vehicles.size()); + assertTrue(vehicleInCollection(v1,vehicles)); + assertTrue(vehicleInCollection(v2,vehicles)); + } + + private boolean vehicleInCollection(Vehicle v, Collection vehicles) { + for(Vehicle veh : vehicles){ + if(veh == v) return true; + } + return false; + } + + }