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 455004593115dca78e2a7109175c0921536114a9..8ba1d4f31eb5064e67086773395bab8396df3d8f 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java +++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java @@ -9,6 +9,27 @@ import java.lang.reflect.InvocationTargetException; import org.testng.Assert; final class AlgorithmHelper { + public static final class AlgorithmResult { + private final Isochrone algorithm; + private final MemoryOutput output; + + private AlgorithmResult(final Isochrone algorithm) { + super(); + this.algorithm = algorithm; + output = algorithm.compute(); + + // output created from output -> we can savely close it here + algorithm.close(); + } + + public Isochrone getAlgorithm() { + return algorithm; + } + + public MemoryOutput getOutput() { + return output; + } + } // Constructor @@ -16,13 +37,13 @@ final class AlgorithmHelper { // Public static methods - public static MemoryOutput run(final Class<? extends Isochrone> algorithmClass, final TestParameters params) { + public static AlgorithmResult run(final Class<? extends Isochrone> algorithmClass, final TestParameters params) { return run(algorithmClass, params, true); } - public static MemoryOutput 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()); + public static AlgorithmResult run(final Class<? extends Isochrone> algorithmClass, final TestParameters params, final boolean expireNodes) { + final ConfigDataset c = ConfigDataset.getInstance(params.getDataset()); + final Query query = new Query(params.getDirection(), params.getWalkingSpeed(), params.getDuration(), params.getDate(), expireNodes, params.getMode()); query.setStartNodeIds(params.getStartNodeId()); Isochrone algorithm = null; @@ -32,10 +53,7 @@ final class AlgorithmHelper { Assert.fail(e.getMessage()); } - final MemoryOutput o = algorithm.compute(); - algorithm.close(); - - return o; + return new AlgorithmResult(algorithm); } } diff --git a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java index 5abb7219288ac58237f3ee8507272477eeb0e1a6..37f2467cd89cb1b84d426b145f0b451798597e0a 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java +++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java @@ -195,13 +195,13 @@ public final class AlgorithmRuntimeTest { final Collection<TestParameters> dsParams = datasets.get(dsName); for (final TestParameters params : dsParams) { - LOGGER.debug(" - executing for isochrone duration: " + params.getRuntime()); + LOGGER.debug(" - executing for isochrone duration: " + params.getDuration()); final long startTime = Calendar.getInstance().getTimeInMillis(); AlgorithmHelper.run(clazz, params); final long runTime = Calendar.getInstance().getTimeInMillis() - startTime; - LOGGER.debug(" - runtime \"" + params.getRuntime() + "\": " + runTime + "msec"); - addRuntimeEntry(String.valueOf(params.getRuntime()), clazz.getSimpleName(), runTime); + LOGGER.debug(" - runtime \"" + params.getDuration() + "\": " + runTime + "msec"); + addRuntimeEntry(String.valueOf(params.getDuration()), clazz.getSimpleName(), runTime); runTimeOverall += runTime; } 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 02d72cffd8c9b0da6eda0d91b48fbe53339eb6bc..6f9c69ec1c709409b60c66025d5be40f1fe9dc0c 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java +++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java @@ -84,11 +84,11 @@ public class AlgorithmTest { } private static void run(final Class<? extends Isochrone> algorithmClass, final TestParameters params, final boolean expireNodes) { - LOGGER.info("Executing \"" + algorithmClass.getSimpleName() + "\""); - long startTime = Calendar.getInstance().getTimeInMillis(); + LOGGER.info("Executing \"" + algorithmClass.getSimpleName() + "\"" + ((expireNodes) ? " (with node expiration)" : "")); + final long startTime = Calendar.getInstance().getTimeInMillis(); AlgorithmHelper.run(algorithmClass, params, expireNodes); - long runTime = Calendar.getInstance().getTimeInMillis() - startTime; - LOGGER.info(" - runtime: \"" + params.getRuntime() + "\": " + runTime + "msec"); + final long runTime = Calendar.getInstance().getTimeInMillis() - startTime; + LOGGER.info(" - runtime: \"" + params.getDuration() + "\": " + runTime + "msec"); LOGGER.info("-----------------------------"); } 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 6ecff85b0a45bea943a25425c7c7482f9fa06dc6..d02a8da31a6361ce4ebefae21996e65d85c15f12 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java +++ b/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java @@ -115,7 +115,7 @@ public final class ComparisonTest { // CHECKSTYLE:ON MagicNumber final Collection<String> datasetNames = datasetParams.keySet(); - for (String dsName : datasetNames) { + for (final String dsName : datasetNames) { addDataset(dsName); } } @@ -127,10 +127,10 @@ public final class ComparisonTest { times = new TreeSet<>(); for (int i = 0; i < RUNTIME_OFFSETS.length; ++i) { - int offset = RUNTIME_OFFSETS[i]; - int stepWidth = RUNTIME_POINTS_PER_OFFSET[i]; + final int offset = RUNTIME_OFFSETS[i]; + final int stepWidth = RUNTIME_POINTS_PER_OFFSET[i]; for (int j = 0; j < offset; j += stepWidth) { - int runtime = Math.max(offset, offset * j); + final int runtime = Math.max(offset, offset * j); if (runtime > MAX_RUNTIME) { return; } @@ -144,14 +144,14 @@ public final class ComparisonTest { final String n1 = clazz1.getSimpleName(); final String n2 = clazz2.getSimpleName(); final Set<String> datasetNames = datasets.keySet(); - for (String dsName : datasetNames) { + for (final String dsName : datasetNames) { LOGGER.info("Comparing results for " + n1 + " and " + n2 + " on dataset \"" + dsName + "\""); final Collection<TestParameters> dsParams = datasets.get(dsName); for (final TestParameters params : dsParams) { - LOGGER.debug(" - comparing for isochrone duration: " + params.getRuntime()); - final MemoryOutput o1 = AlgorithmHelper.run(clazz1, params); - final MemoryOutput o2 = AlgorithmHelper.run(clazz2, params); + LOGGER.debug(" - comparing for isochrone duration: " + params.getDuration()); + final MemoryOutput o1 = AlgorithmHelper.run(clazz1, params).getOutput(); + final MemoryOutput o2 = AlgorithmHelper.run(clazz2, params).getOutput(); final Map<Integer, Link> l1 = o1.getLinks(); final Map<Integer, Link> l2 = o2.getLinks(); diff --git a/src/test/java/it/unibz/inf/isochrone/network/ExpirationTest.java b/src/test/java/it/unibz/inf/isochrone/network/ExpirationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..87aa0fb94f0e81cc47db444be26c41005e7287da --- /dev/null +++ b/src/test/java/it/unibz/inf/isochrone/network/ExpirationTest.java @@ -0,0 +1,63 @@ +package it.unibz.inf.isochrone.network; + +import it.unibz.inf.isochrone.algorithm.Isochrone; +import it.unibz.inf.isochrone.algorithm.MDijkstra; +import it.unibz.inf.isochrone.algorithm.MineX; +import it.unibz.inf.isochrone.algorithm.MrneX; +import it.unibz.inf.isochrone.network.AlgorithmHelper.AlgorithmResult; + +import java.util.Calendar; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.Assert; +import org.testng.annotations.Test; + +public class ExpirationTest { + private static final Logger LOGGER = LoggerFactory.getLogger(ExpirationTest.class); + + // Public methods + + @Test + public void testMDijkstraDefault() { + final int nrNodesAll = run(MDijkstra.class, false); + final int nrNodesExpired = run(MDijkstra.class, true); + + Assert.assertEquals(nrNodesAll, nrNodesExpired, "It seems like nodes expired when setting expire to true for MDijkstra, but this algorithm does not support expiration"); + } + + @Test + public void testMineXDefault() { + final int nrNodesAll = run(MineX.class, false); + final int nrNodesExpired = run(MineX.class, true); + + Assert.assertTrue(nrNodesAll > nrNodesExpired, "It seems like no nodes were expired when setting expire to true for MineX"); + } + + @Test + public void testMrneXDefault() { + final int nrNodesAll = run(MrneX.class, false); + final int nrNodesExpired = run(MrneX.class, true); + + Assert.assertTrue(nrNodesAll > nrNodesExpired, "It seems like no nodes were expired when setting expire to true for MrneX"); + } + + // Private static methods + + private static int run(final Class<? extends Isochrone> algorithmClass, final boolean expireNodes) { + LOGGER.info("Executing \"" + algorithmClass.getSimpleName() + "\"" + ((expireNodes) ? " (with node expiration)" : "")); + final TestParameters params = new TestParameters(); + final long startTime = Calendar.getInstance().getTimeInMillis(); + final AlgorithmResult result = AlgorithmHelper.run(algorithmClass, params, expireNodes); + final long runTime = Calendar.getInstance().getTimeInMillis() - startTime; + final int nrNodesMemory = result.getAlgorithm().getNodes().size(); + final int nrNodesOutput = result.getOutput().getNodes().size(); + LOGGER.info(" - runtime: \"" + params.getDuration() + "\": " + runTime + "msec"); + LOGGER.info(" - nodes (in memory): \"" + nrNodesMemory + ""); + LOGGER.info(" - nodes (in output): \"" + nrNodesOutput + ""); + LOGGER.info("-----------------------------"); + + return nrNodesMemory; + } + +} 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 415b7d74c73de387fb120ee8dce3badad396b91d..b000858da45da91db3222875e596bec9d04c13be 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java +++ b/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java @@ -12,15 +12,15 @@ import java.util.GregorianCalendar; */ final class TestParameters { private static final double DEFAULT_WALKING_SPEED = 1.0d; - private static final int DEFAULT_RUNTIME = 3660; + private static final int DEFAULT_DURATION = 3660; private static final Calendar DEFAULT_DATE = new GregorianCalendar(2011, 9, 20, 15, 0, 0); private static final Mode DEFAULT_MODE = Mode.MULTIMODAL; - private static final int DEFAULT_NODE_ID = 2000500; + private static final int DEFAULT_STARTNODE_ID = 2000500; private static final String DEFAULT_DATASET = "bz"; private static final Direction DEFAULT_DIRECTION = Direction.INCOMING; private final double walkingSpeed; - private final int runtime; + private final int duration; private final Calendar date; private final Mode mode; private final int startNodeId; @@ -29,18 +29,18 @@ final class TestParameters { public TestParameters() { walkingSpeed = DEFAULT_WALKING_SPEED; - runtime = DEFAULT_RUNTIME; + duration = DEFAULT_DURATION; date = DEFAULT_DATE; mode = DEFAULT_MODE; - startNodeId = DEFAULT_NODE_ID; + startNodeId = DEFAULT_STARTNODE_ID; dataset = DEFAULT_DATASET; direction = DEFAULT_DIRECTION; } // CHECKSTYLE:OFF ParameterNumber - public TestParameters(final double walkingSpeed, final int runtime, final Calendar date, final Mode mode, final int startNodeId, final String dataset, final Direction direction) { + public TestParameters(final double walkingSpeed, final int duration, final Calendar date, final Mode mode, final int startNodeId, final String dataset, final Direction direction) { this.walkingSpeed = walkingSpeed; - this.runtime = runtime; + this.duration = duration; this.date = date; this.mode = mode; this.startNodeId = startNodeId; @@ -69,8 +69,8 @@ final class TestParameters { return startNodeId; } - public int getRuntime() { - return runtime; + public int getDuration() { + return duration; } public double getWalkingSpeed() {