diff --git a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmConfiguration.java b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..39c5d70f066d65525a2310b6817469e6bfbdfe17 --- /dev/null +++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmConfiguration.java @@ -0,0 +1,87 @@ +package it.unibz.inf.isochrone.network; + +import it.unibz.inf.isochrone.algorithm.Isochrone; + +public class AlgorithmConfiguration { + private final Class<? extends Isochrone> algorithmClass; + private final TestParameters params; + private final boolean expireNodes; + + public AlgorithmConfiguration(final Class<? extends Isochrone> algorithmClass, final TestParameters params, final boolean expireNodes) { + this.algorithmClass = algorithmClass; + this.params = params; + this.expireNodes = expireNodes; + } + + public AlgorithmConfiguration(final Class<? extends Isochrone> algorithmClass, final TestParameters params) { + this(algorithmClass, params, true); + } + + // Getters + + public Class<? extends Isochrone> getAlgorithmClass() { + return algorithmClass; + } + + public TestParameters getTestParameter() { + return params; + } + + public boolean isExpireNodes() { + return expireNodes; + } + + // Public methods + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + // CHECKSTYLE:OFF MagicNumber + result = prime * result + ((algorithmClass == null) ? 0 : algorithmClass.hashCode()); + result = prime * result + (expireNodes ? 1231 : 1237); + result = prime * result + ((params == null) ? 0 : params.hashCode()); + // CHECKSTYLE:ON MagicNumber + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + + final AlgorithmConfiguration other = (AlgorithmConfiguration) obj; + if (algorithmClass == null) { + if (other.algorithmClass != null) { + return false; + } + } else if (!algorithmClass.equals(other.algorithmClass)) { + return false; + } + if (expireNodes != other.expireNodes) { + return false; + } + if (params == null) { + if (other.params != null) { + return false; + } + } else if (!params.equals(other.params)) { + return false; + } + + return true; + } + + @Override + public String toString() { + return "CachingKey [class=" + algorithmClass.getSimpleName() + ", duration=" + params.getDuration() + ", expireNodes=" + expireNodes + "]"; + } + +} 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 62eb2458e7611abac6c6d21c61b4af34261cb370..d34e73a9aa72c0771708eb4b8cecfc3a9717c612 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java +++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java @@ -49,22 +49,19 @@ final class AlgorithmHelper { return i1; } - public static AlgorithmResult run(final Class<? extends Isochrone> algorithmClass, final TestParameters params) { - return run(algorithmClass, params, true); - } - - public static AlgorithmResult run(final Class<? extends Isochrone> algorithmClass, final TestParameters params, final boolean expireNodes) { + public static AlgorithmResult run(final AlgorithmConfiguration config) { + final TestParameters params = config.getTestParameter(); final ConfigDataset c = ConfigDataset.getInstance(params.getDataset()); if (c == null) { Assert.fail("Could not create dataset from configuration"); } - final Query query = new Query(params.getDirection(), params.getWalkingSpeed(), params.getDuration(), params.getDate(), expireNodes, params.getMode()); + final Query query = new Query(params.getDirection(), params.getWalkingSpeed(), params.getDuration(), params.getDate(), config.isExpireNodes(), params.getMode()); query.setStartNodeIds(params.getStartNodeId()); Isochrone algorithm = null; try { - algorithm = algorithmClass.getConstructor(ConfigDataset.class, Query.class).newInstance(c, query); + algorithm = config.getAlgorithmClass().getConstructor(ConfigDataset.class, Query.class).newInstance(c, query); } catch (final InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { Assert.fail(e.getMessage()); } 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 c7c71b098af8758b6fd9a78806d7dd9fbf48ad3f..c6100e99c0d6ec9da77375fe6547f12ffdd155e3 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java +++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java @@ -203,7 +203,7 @@ public final class AlgorithmRuntimeTest { for (final TestParameters params : dsParams) { LOGGER.debug(" - executing for isochrone duration: " + params.getDuration()); final long startTime = Calendar.getInstance().getTimeInMillis(); - AlgorithmHelper.run(clazz, params); + AlgorithmHelper.run(new AlgorithmConfiguration(clazz, params)); final long runTime = Calendar.getInstance().getTimeInMillis() - startTime; LOGGER.debug(" - runtime \"" + params.getDuration() + "\": " + runTime + "msec"); 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 635b4f21c724ce0f0b29e532e64c5f29a671ed54..85b404302680ea1e6ffcc2bf55baed32c90fc2e3 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java +++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java @@ -92,7 +92,7 @@ public class AlgorithmTest { private static void run(final Class<? extends Isochrone> algorithmClass, final TestParameters params, final boolean expireNodes) { LOGGER.info("Executing \"" + algorithmClass.getSimpleName() + "\"" + ((expireNodes) ? " (with node expiration)" : "")); final long startTime = Calendar.getInstance().getTimeInMillis(); - AlgorithmHelper.run(algorithmClass, params, expireNodes); + AlgorithmHelper.run(new AlgorithmConfiguration(algorithmClass, params, expireNodes)); 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 d55494e24e7617fe87c8c499f5a0e1ff7bd6e9f1..814fc838bdec43d15162f4eecd88437d42547962 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java +++ b/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java @@ -42,6 +42,7 @@ public final class ComparisonTest { 2, // every 2 hours 1 // every day }; + private static Map<AlgorithmConfiguration, Collection<Integer>> cache = new HashMap<>(); private static Map<String, List<TestParameters>> datasets = new HashMap<>(); private static Map<String, InitParams> datasetParams; private static Set<Integer> times; @@ -118,6 +119,18 @@ public final class ComparisonTest { datasets.put(datasetName, dsParams); } + private static Collection<Integer> getResult(final AlgorithmConfiguration key) { + Collection<Integer> result = cache.get(key); + if (result == null) { + final MemoryOutput o1 = AlgorithmHelper.run(key).getOutput(); + result = AlgorithmHelper.getDistinctIds(o1.getLinks()); + + cache.put(key, result); + } + + return result; + } + private static synchronized void initDatasets() { if (datasetParams != null) { return; @@ -171,11 +184,9 @@ public final class ComparisonTest { final Collection<TestParameters> dsParams = datasets.get(dsName); for (final TestParameters params : dsParams) { LOGGER.debug(" - comparing for isochrone duration: " + params.getDuration()); - final MemoryOutput o1 = AlgorithmHelper.run(clazz1, params, expireNodes).getOutput(); - final MemoryOutput o2 = AlgorithmHelper.run(clazz2, params, expireNodes).getOutput(); - final Collection<Integer> l1 = AlgorithmHelper.getDistinctIds(o1.getLinks()); - final Collection<Integer> l2 = AlgorithmHelper.getDistinctIds(o2.getLinks()); - Assert.assertEquals(l1, l2, "Links for class \"" + n1 + "\"" + " != links for class \"" + n2 + "\""); + final Collection<Integer> l1 = getResult(new AlgorithmConfiguration(clazz1, params, expireNodes)); + final Collection<Integer> l2 = getResult(new AlgorithmConfiguration(clazz2, params, expireNodes)); + Assert.assertEquals(l1, l2, "Links from algorithm \"" + n1 + "\"" + " are not equal to links from algorithm \"" + n2 + "\""); } LOGGER.info("-----------------------------"); } diff --git a/src/test/java/it/unibz/inf/isochrone/network/ExpirationTest.java b/src/test/java/it/unibz/inf/isochrone/network/ExpirationTest.java index d21771f1e6c6f31325a03e4b6a9e291cc88e0183..e4d6a105a22bcacc107f78c9dd08d61ca00e5331 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/ExpirationTest.java +++ b/src/test/java/it/unibz/inf/isochrone/network/ExpirationTest.java @@ -59,7 +59,7 @@ public class ExpirationTest { private static int run(final Class<? extends Isochrone> algorithmClass, final boolean expireNodes) { LOGGER.info("Executing \"" + algorithmClass.getSimpleName() + "\"" + ((expireNodes) ? " (with node expiration)" : "")); final long startTime = Calendar.getInstance().getTimeInMillis(); - final AlgorithmResult result = AlgorithmHelper.run(algorithmClass, TEST_PARAMETER, expireNodes); + final AlgorithmResult result = AlgorithmHelper.run(new AlgorithmConfiguration(algorithmClass, TEST_PARAMETER, expireNodes)); final long runTime = Calendar.getInstance().getTimeInMillis() - startTime; final int nrNodesMemory = result.getAlgorithm().getNodes().size(); diff --git a/src/test/java/it/unibz/inf/isochrone/network/ReachabilityTest.java b/src/test/java/it/unibz/inf/isochrone/network/ReachabilityTest.java index 4619ab334df26d19aed56233d10b66d3d3f3c623..91c0b5d6ef892aedc0ba8dcdd724bbdf356cac3c 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/ReachabilityTest.java +++ b/src/test/java/it/unibz/inf/isochrone/network/ReachabilityTest.java @@ -46,7 +46,7 @@ public class ReachabilityTest { final int nodeIdToCheck = 5117; // bus station id = 5117; Defregger Str./Fagenstraße (reachable by bus route 1) LOGGER.info("Checking nodes from FUB (15min isncoming isochrone)"); - final AlgorithmResult result = AlgorithmHelper.run(MineX.class, PARAM_LOCAL, true); + final AlgorithmResult result = AlgorithmHelper.run(new AlgorithmConfiguration(MineX.class, PARAM_LOCAL, true)); final Collection<Node> resultNodes = result.getOutput().getNodes(); LOGGER.info(" - found " + resultNodes.size() + " reachable nodes"); @@ -66,7 +66,7 @@ public class ReachabilityTest { final int nodeIdToCheck = 5117; // bus station id = 5117; Defregger Str./Fagenstraße (reachable by bus route 1) LOGGER.info("Checking nodes from FUB (15min isncoming isochrone)"); - final AlgorithmResult result = AlgorithmHelper.run(MineX.class, PARAM_LOCAL, true); + final AlgorithmResult result = AlgorithmHelper.run(new AlgorithmConfiguration(MineX.class, PARAM_LOCAL, true)); final Collection<Link> resultLinks = result.getOutput().getLinks(); LOGGER.info(" - found " + resultLinks.size() + " links");