package vroom.optimization.online.jmsa.vrp; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.LinkedList; import java.util.List; import org.junit.Before; import org.junit.Test; import vroom.common.modeling.dataModel.INodeVisit; import vroom.common.modeling.util.VRPInstanceBuilder; import vroom.optimization.online.jmsa.MSAGlobalParameters; /** * <code>VRPScenarioTest</code> is a test case for the {@link VRPScenario} class Creation date: May 3, 2010 - 12:33:25 PM<br/> * * @author Victor Pillac, <a href="http://uniandes.edu.co">Universidad de Los Andes</a>-<a href="http://copa.uniandes.edu.co">Copa</a> <a * href="http://www.emn.fr">Ecole des Mines de Nantes</a>-<a href="http://www.irccyn.ec-nantes.fr/irccyn/d/en/equipes/Slp">SLP</a> * @version 1.0 */ public class VRPScenarioTest { VRPScenario scen; List<VRPActualRequest> actualRequests; @Before public void setUp() throws Exception { MSAVRPInstance vrpInstance = new MSAVRPInstance(VRPInstanceBuilder.newSimpleDynamicInstance(10, 100, 10, 10, 0, false), new MSAGlobalParameters()); actualRequests = new LinkedList<VRPActualRequest>(); List<VRPSampledRequest> sampledRequests = new LinkedList<VRPSampledRequest>(); for (INodeVisit n : vrpInstance.getNodeVisits()) { actualRequests.add(new VRPActualRequest(n)); } scen = new VRPScenario(vrpInstance, actualRequests, sampledRequests); scen.acquireLock(); scen.addRoute(new VRPScenarioRoute(scen, vrpInstance.getFleet().getVehicle())); for (VRPActualRequest r : actualRequests) { scen.getRoute(0).appendNode(r); } scen.releaseLock(); } @Test public void testCloneObject() { System.out.println("----------------------"); System.out.println(" testCloneObject "); System.out.println("----------------------"); scen.acquireLock(); VRPScenario clone = scen.clone(); clone.acquireLock(); System.out.println("Scenario:"); System.out.println(scen); System.out.println("Clone:"); System.out.println(clone); assertTrue(clone != scen); assertTrue("Shared reference", clone.getLockInstance() != scen.getLockInstance()); assertEquals("Original and clone should have the same number of routes", clone.getRouteCount(), scen.getRouteCount()); for (int r = 0; r < clone.getRouteCount(); r++) { assertTrue("Shared reference", clone.getRoute(r) != scen.getRoute(r)); assertEquals("Original and clone route should have the same length", clone.getRoute(r).length(), scen.getRoute(r).length()); assertEquals("Original and clone route should have the same cost", clone.getRoute(r).getCost(), scen.getRoute(r).getCost(), 0.0001); assertTrue("Cloned route should have a reference to the cloned scenario", clone.getRoute(r) .getParentSolution() == clone); for (int p = 0; p < clone.getRoute(r).getVehicle().getCompartmentCount(); p++) { assertEquals("Original and clone route should have the same load", clone.getRoute(r).getLoad(p), scen.getRoute(r).getLoad(p), 0.0001); } for (int n = 0; n < clone.getRoute(r).length(); n++) { assertTrue("Unshared reference", clone.getRoute(r).getNodeAt(n) == scen.getRoute(r) .getNodeAt(n)); } } scen.releaseLock(); clone.releaseLock(); } }