diff --git a/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java b/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java index 8ad6304dce4227f5e4babc2a8e84c8acbebf95c3..7825d9f4a01801a59248dd30277c5a24b8f2928a 100644 --- a/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java +++ b/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java @@ -96,10 +96,10 @@ public abstract class Isochrone { public <T extends Output> T compute(final T output) { output.beforeCalculation(); - if (!query.getNodes().isEmpty()) { - initializeStartNodes(query.getNodes()); + if (!query.getStartNodes().isEmpty()) { + initializeStartNodes(query.getStartNodes()); } else { - initializeStartLocations(output, query.getLocations()); + initializeStartLocations(output, query.getStartLocations()); } Node node = null; diff --git a/src/main/java/it/unibz/inf/isochrone/util/Query.java b/src/main/java/it/unibz/inf/isochrone/util/Query.java index ea14afac4a1daa3450d212b63be4489d4051955c..b35773ba187db519faf3f9c0e57563bc50fad49a 100644 --- a/src/main/java/it/unibz/inf/isochrone/util/Query.java +++ b/src/main/java/it/unibz/inf/isochrone/util/Query.java @@ -20,83 +20,100 @@ public class Query { private final Direction dir; private final Mode mode; private final Double walkingSpeed; - private Collection<Integer> nodes = new HashSet<Integer>(); - private Collection<Location> locations = new HashSet<Location>(); + private Collection<Integer> startNodes; + private Collection<Location> startLocations; private Long duration; private Calendar time; private Long toTime; private Long fromTime; private Boolean expireNodes; + // Constructor + /** * Construct a query object with every field except the nodes and * locations. Remember to set them afterward!! */ public Query(final Direction dir, final double walkingSpeed, final long duration, final Calendar time, final boolean expireNodes, final Mode mode) { + startNodes = new HashSet<Integer>(); + startLocations = new HashSet<Location>(); + this.dir = dir; this.walkingSpeed = walkingSpeed; this.duration = duration; - if (time != null) { - setTime(time); - } this.expireNodes = expireNodes; this.mode = mode; + + setTime(time); } - public Collection<Integer> getNodes() { - return nodes; + // Public methods + + public Direction getDir() { + return dir; } - public Collection<Location> getLocations() { - return locations; + public Long getDuration() { + return duration; } - public void setNodes(final Integer... ids) { - setNodes(Arrays.asList(ids)); + public Long getFromTime() { + return fromTime; } - public void setNodes(final Collection<Integer> nodes) { - this.nodes = nodes; + public Mode getMode() { + return mode; } - public void setLocations(final Collection<Location> locations) { - this.locations = locations; + public Collection<Location> getStartLocations() { + return startLocations; } - public Direction getDir() { - return dir; + public Collection<Integer> getStartNodes() { + return startNodes; } - public Mode getMode() { - return mode; + public Calendar getTime() { + return time; } - public Long getDuration() { - return duration; + public Long getToTime() { + return toTime; + } + + public Double getWalkingSpeed() { + return walkingSpeed; + } + + public Boolean isExpireNodes() { + return expireNodes; } public void setDuration(final Long duration) { this.duration = duration; } - public Double getWalkingSpeed() { - return walkingSpeed; + public void setExpireNodes(final Boolean shouldExpireNodes) { + expireNodes = shouldExpireNodes; } - public Calendar getTime() { - return time; + public void setStartLocations(final Collection<Location> startLocations) { + this.startLocations = startLocations; } - public Long getFromTime() { - return fromTime; + public void setStartNodeIds(final Integer... startId) { + setStartNodes(Arrays.asList(startId)); } - public Long getToTime() { - return toTime; + public void setStartNodes(final Collection<Integer> startNodes) { + this.startNodes = startNodes; } public void setTime(final Calendar time) { this.time = time; + if (time == null) { + return; + } final Calendar calendar = new GregorianCalendar(); calendar.setTimeInMillis(time.getTimeInMillis()); @@ -117,12 +134,4 @@ public class Query { } } - public Boolean isExpireNodes() { - return expireNodes; - } - - public void setExpireNodes(final Boolean shouldExpireNodes) { - expireNodes = shouldExpireNodes; - } - } diff --git a/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java b/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java index aac24fe8908f8809139b1b44bb3cee2e2ff6c905..0de841822e0059d65037c7fdc88e09b9d9d06855 100644 --- a/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java +++ b/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java @@ -67,7 +67,7 @@ public class ServiceIsochrone extends AbstractService<RequestIsochrone, Response final DatabaseWeb db = new DatabaseWeb(config, request.getMode(), direction); truncateTables(config); final Query query = new Query(direction, request.getSpeed(), request.getDmax(), request.getDate(), true, request.getMode()); - query.setLocations(locationsFromQueryNodes(request.getQueryNodes(), db)); + query.setStartLocations(locationsFromQueryNodes(request.getQueryNodes(), db)); final Isochrone isochrone = getAlgorithm(request.getAlgorithm(), config, query); final BBoxOutput output = isochrone.compute(new BBoxOutput(config, db, direction)); final long timeIsochrone = System.currentTimeMillis() - startComputationTiming; diff --git a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java index 3f92e77edc037bc5152452d445259b39003391e3..41d03a38036d5acd9985b45af662dd545c07def4 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java +++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java @@ -24,7 +24,7 @@ final class AlgorithmHelper { public static void run(final Class<? extends Isochrone> algorithmClass, final TestParameters params, final boolean expireNodes) { ConfigDataset c = ConfigDataset.getInstance(params.getDataset()); Query query = new Query(params.getDirection(), params.getWalkingSpeed(), params.getRuntime(), params.getDate(), expireNodes, params.getMode()); - query.setNodes(params.getNodeId()); + query.setStartNodeIds(params.getStartNodeId()); Isochrone algorithm = null; try { diff --git a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java index 54e2feb2d98a4ebbccd9ec1c5c99af17d66d1af2..03c1ef8ae6487f55c9bd17c109557cf0b335f6d9 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java +++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java @@ -12,11 +12,15 @@ import java.util.GregorianCalendar; import org.testng.annotations.Test; public class AlgorithmTest { - private static final String TEST_DATASET = "bz"; + private static final String DATASET = "bz"; private static final Double WALKING_SPEED = 1.0; private static final int DURATION = 50; private static final Calendar TIME = new GregorianCalendar(2011, 6, 1, 12, 0, 0); - private static final int NODE_ID = 5015; + private static final int STARTNODE_ID = 5015; + private static final Mode MODE = Mode.MULTIMODAL; + private static final Direction DIRECTION = Direction.INCOMING; + + // Public methodd @Test public void testMDijkstra() { @@ -36,7 +40,7 @@ public class AlgorithmTest { // Private methods private static TestParameters getParams() { - return new TestParameters(WALKING_SPEED, DURATION, TIME, Mode.MULTIMODAL, NODE_ID, TEST_DATASET, Integer.MAX_VALUE, Direction.INCOMING); + return new TestParameters(WALKING_SPEED, DURATION, TIME, MODE, STARTNODE_ID, DATASET, DIRECTION); } } diff --git a/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java b/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java index 02398ced1f9e373bc595cd098dfe184f70687688..215f47b5b8d5381bec9824bf45f44e14927be7f9 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java +++ b/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java @@ -28,11 +28,11 @@ public class ComparisonTest { final ConfigDataset config = ConfigDataset.getInstance(TEST_DATASET); final Query queryDijkstra = new Query(Direction.INCOMING, WALKING_SPEED, DURATION, TIME, false, Mode.MULTIMODAL); - queryDijkstra.setNodes(NODE_ID); + queryDijkstra.setStartNodeIds(NODE_ID); final Isochrone mDijkstra = new MDijkstra(config, queryDijkstra); final Query queryMinex = new Query(Direction.INCOMING, WALKING_SPEED, DURATION, TIME, true, Mode.MULTIMODAL); - queryMinex.setNodes(NODE_ID); + queryMinex.setStartNodeIds(NODE_ID); final Isochrone mineX = new MineX(config, queryMinex); Assert.assertEquals(mDijkstra.compute().getLinks(), mineX.compute().getLinks(), "Dijkstra != MineX"); @@ -43,11 +43,11 @@ public class ComparisonTest { final ConfigDataset config = ConfigDataset.getInstance(TEST_DATASET); final Query queryDijkstra = new Query(Direction.INCOMING, WALKING_SPEED, DURATION, TIME, false, Mode.MULTIMODAL); - queryDijkstra.setNodes(NODE_ID); + queryDijkstra.setStartNodeIds(NODE_ID); final Isochrone mDijkstra = new MDijkstra(config, queryDijkstra); final Query queryMrneX = new Query(Direction.INCOMING, WALKING_SPEED, DURATION, TIME, true, Mode.MULTIMODAL); - queryMrneX.setNodes(NODE_ID); + queryMrneX.setStartNodeIds(NODE_ID); final Isochrone mrneX = new MrneX(config, queryMrneX); Assert.assertEquals(mDijkstra.compute().getLinks(), mrneX.compute().getLinks(), "Dijkstra != MrneX"); @@ -57,7 +57,7 @@ public class ComparisonTest { public void testMineXMrneX() throws AlgorithmException { final ConfigDataset config = ConfigDataset.getInstance(TEST_DATASET); final Query query = new Query(Direction.INCOMING, WALKING_SPEED, DURATION, TIME, true, Mode.MULTIMODAL); - query.setNodes(NODE_ID); + query.setStartNodeIds(NODE_ID); final Isochrone mineX = new MineX(config, query); final Isochrone mrneX = new MrneX(config, query); diff --git a/src/test/java/it/unibz/inf/isochrone/network/QueryTest.java b/src/test/java/it/unibz/inf/isochrone/network/QueryTest.java index 6a298b76996b121419c4eebe0ea3ddf404a343d6..cc3a2d8d675b57b9930ee3d9899e355613859a21 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/QueryTest.java +++ b/src/test/java/it/unibz/inf/isochrone/network/QueryTest.java @@ -6,6 +6,7 @@ import it.unibz.inf.isochrone.util.Query; import java.util.Arrays; import java.util.Calendar; +import java.util.Collection; import java.util.GregorianCalendar; import java.util.List; @@ -15,23 +16,26 @@ import org.testng.annotations.Test; public class QueryTest { private static final Calendar TIME = new GregorianCalendar(2013, 1, 1, 15, 30); private static final double SPEED = 1.5; + private static final Direction DIRECTION = Direction.INCOMING; private static final long DURATION = 50; - private static final int NODE_1 = 123; - private static final int NODE_2 = 456; - private static final int NODE_3 = 789; - private static final int NODE_4 = 666; + private static final Mode MODE = Mode.MULTIMODAL; + private static final boolean NODE_EXPIRES = true; + private static final Integer[] NODES_ADDED = {123, 456, 789}; + private static final Integer NODE_NOT_ADDED = 666; @Test public void checkQueryInterface() { - final List<Integer> nodeList = Arrays.asList(NODE_1, NODE_2, NODE_3); - final Query query = new Query(Direction.INCOMING, SPEED, DURATION, TIME, true, Mode.MULTIMODAL); - query.setNodes(nodeList); - - Assert.assertEquals(query.getNodes().size(), nodeList.size(), "Number of added nodes unexpected"); - Assert.assertTrue(query.getNodes().contains(NODE_1), "Added node #1 not available"); - Assert.assertTrue(query.getNodes().contains(NODE_2), "Added node #2 not available"); - Assert.assertTrue(query.getNodes().contains(NODE_3), "Added node #3 not available"); - Assert.assertFalse(query.getNodes().contains(NODE_4), "Not added node available"); + final List<Integer> nodeList = Arrays.asList(NODES_ADDED); + final Query query = new Query(DIRECTION, SPEED, DURATION, TIME, NODE_EXPIRES, MODE); + query.setStartNodes(nodeList); + + final Collection<Integer> resultNodes = query.getStartNodes(); + Assert.assertEquals(resultNodes.size(), nodeList.size(), "Number of added nodes unexpected"); + for (Integer i : NODES_ADDED) { + Assert.assertTrue(resultNodes.contains(i), "Added node #" + i + " not available"); + } + Assert.assertFalse(resultNodes.contains(NODE_NOT_ADDED), "Not added node available"); + Assert.assertEquals(query.getDuration(), (Long) DURATION, "Duration unexpected"); Assert.assertEquals(query.getTime(), TIME, "Time unexpected"); Assert.assertEquals(query.getWalkingSpeed(), SPEED, "WalkingSpeed unexpected"); diff --git a/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java b/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java index 35194a0cb4ec43d6ba0778116ad43bc9b29caa94..1c025a39748fffff912894e16e0ca33ed593319f 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java +++ b/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java @@ -46,6 +46,9 @@ public final class RuntimeComplex { private static final int IT_NODE_ID = 21; private static final Calendar IT_TIME = new GregorianCalendar(2011, 9, 20, 15, 0, 0); private static final String RESULTFILE_XML_RUNTIME = "build/reports/tests/algorithm-runtimes.xml"; + private static final Direction DIRECTION = Direction.INCOMING; + private static final Mode MODE = Mode.MULTIMODAL; + private static final double WALKING_SPEED = 1.0; private static final int MAX_RUNTIME = 18000; // 5 hours; private static final int RUNTIME_POINTS_PER_OFFSET = 12; private static final int[] RUNTIME_OFFSETS = { @@ -56,7 +59,8 @@ public final class RuntimeComplex { private static Map<Integer, TestParameters> datasets = new TreeMap<>(); private static Map<String, Map<String, Long>> runtimes = new HashMap<>(); - // launcher for visualVM + // Launcher method (main method) for visualVM + public static void main(final String[] args) { final RuntimeComplex o = new RuntimeComplex(); // addAllDatasets(); @@ -81,6 +85,8 @@ public final class RuntimeComplex { System.out.println("Overall Time (in msec): " + runTimeOverall); } + // Public static methods + @AfterClass public static void writeRuntimeXML() { final Set<Entry<String, Map<String, Long>>> resultSet = runtimes.entrySet(); @@ -96,6 +102,8 @@ public final class RuntimeComplex { // addDatasetST(times); } + // Public methods + @Test(invocationCount = REPEAT_COUNT) public void testRuntimeDijkstra() { runForAllDatasets(MDijkstra.class); @@ -116,7 +124,7 @@ public final class RuntimeComplex { private static void addDatasetBZ(final Set<Integer> times) { int i = 0; for (final Integer time : times) { - datasets.put(i++, new TestParameters(1.0, time, BZ_TIME, Mode.MULTIMODAL, BZ_NODE_ID, "bz", Integer.MAX_VALUE, Direction.INCOMING)); + datasets.put(i++, new TestParameters(WALKING_SPEED, time, BZ_TIME, MODE, BZ_NODE_ID, "bz", DIRECTION)); } } @@ -124,7 +132,7 @@ public final class RuntimeComplex { private static void addDatasetIT(final Set<Integer> times) { int i = 0; for (final Integer time : times) { - datasets.put(i++, new TestParameters(1.0, time, IT_TIME, Mode.MULTIMODAL, IT_NODE_ID, "it", Integer.MAX_VALUE, Direction.INCOMING)); + datasets.put(i++, new TestParameters(WALKING_SPEED, time, IT_TIME, MODE, IT_NODE_ID, "it", DIRECTION)); } } @@ -132,7 +140,7 @@ public final class RuntimeComplex { private static void addDatasetSF(final Set<Integer> times) { int i = 0; for (final Integer time : times) { - datasets.put(i++, new TestParameters(1.0, time, SF_TIME, Mode.MULTIMODAL, SF_NODE_ID, "sf", Integer.MAX_VALUE, Direction.INCOMING)); + datasets.put(i++, new TestParameters(WALKING_SPEED, time, SF_TIME, MODE, SF_NODE_ID, "sf", DIRECTION)); } } @@ -140,7 +148,7 @@ public final class RuntimeComplex { private static void addDatasetST(final Set<Integer> times) { int i = 0; for (final Integer time : times) { - datasets.put(i++, new TestParameters(1.0, time, ST_TIME, Mode.MULTIMODAL, ST_NODE_ID, "st", Integer.MAX_VALUE, Direction.INCOMING)); + datasets.put(i++, new TestParameters(WALKING_SPEED, time, ST_TIME, MODE, ST_NODE_ID, "st", DIRECTION)); } } diff --git a/src/test/java/it/unibz/inf/isochrone/network/RuntimeSimple.java b/src/test/java/it/unibz/inf/isochrone/network/RuntimeSimple.java index 5a2a9b4bc4c684fc75a097603799ff653688e665..408d11c8b263fbe51fa6b84edd6c5b01475577d1 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/RuntimeSimple.java +++ b/src/test/java/it/unibz/inf/isochrone/network/RuntimeSimple.java @@ -22,6 +22,8 @@ import org.testng.annotations.Test; public final class RuntimeSimple { private static final Logger LOGGER = LoggerFactory.getLogger(RuntimeSimple.class); + // Public methods + @Test public void runMDijkstra() { run(MDijkstra.class); diff --git a/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java b/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java index 42a3fa4c0ccb480f2232c02520a0c832e94fb843..415b7d74c73de387fb120ee8dce3badad396b91d 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java +++ b/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java @@ -17,16 +17,14 @@ final class TestParameters { private static final Mode DEFAULT_MODE = Mode.MULTIMODAL; private static final int DEFAULT_NODE_ID = 2000500; private static final String DEFAULT_DATASET = "bz"; - private static final int DEFAULT_MAX_MEMORY = Integer.MAX_VALUE; private static final Direction DEFAULT_DIRECTION = Direction.INCOMING; private final double walkingSpeed; private final int runtime; private final Calendar date; private final Mode mode; - private final int nodeId; + private final int startNodeId; private final String dataset; - private final int maxMemory; private final Direction direction; public TestParameters() { @@ -34,21 +32,19 @@ final class TestParameters { runtime = DEFAULT_RUNTIME; date = DEFAULT_DATE; mode = DEFAULT_MODE; - nodeId = DEFAULT_NODE_ID; + startNodeId = DEFAULT_NODE_ID; dataset = DEFAULT_DATASET; - maxMemory = DEFAULT_MAX_MEMORY; direction = DEFAULT_DIRECTION; } // CHECKSTYLE:OFF ParameterNumber - public TestParameters(final double walkingSpeed, final int runtime, final Calendar date, final Mode mode, final int nodeId, final String dataset, final int maxMemory, final Direction direction) { + public TestParameters(final double walkingSpeed, final int runtime, final Calendar date, final Mode mode, final int startNodeId, final String dataset, final Direction direction) { this.walkingSpeed = walkingSpeed; this.runtime = runtime; this.date = date; this.mode = mode; - this.nodeId = nodeId; + this.startNodeId = startNodeId; this.dataset = dataset; - this.maxMemory = maxMemory; this.direction = direction; } // CHECKSTYLE:ON ParameterNumber @@ -65,16 +61,12 @@ final class TestParameters { return direction; } - public int getMaxMemory() { - return maxMemory; - } - public Mode getMode() { return mode; } - public int getNodeId() { - return nodeId; + public int getStartNodeId() { + return startNodeId; } public int getRuntime() {