From f12f53d8a87a6e8ead66dfeb287fefff93b8b2f5 Mon Sep 17 00:00:00 2001
From: Nikolaus Krismer <niko@krismer.de>
Date: Wed, 26 Mar 2014 15:34:02 +0100
Subject: [PATCH] removed duplicate tests some class refactoring

---
 build.gradle                                  |   1 +
 .../isochrone/network/AlgorithmHelper.java    |   3 +-
 ...Complex.java => AlgorithmRuntimeTest.java} | 115 ++++++++++--------
 .../inf/isochrone/network/AlgorithmTest.java  |  69 +++++++++--
 .../inf/isochrone/network/RuntimeSimple.java  |  54 --------
 5 files changed, 127 insertions(+), 115 deletions(-)
 rename src/test/java/it/unibz/inf/isochrone/network/{RuntimeComplex.java => AlgorithmRuntimeTest.java} (71%)
 delete mode 100644 src/test/java/it/unibz/inf/isochrone/network/RuntimeSimple.java

diff --git a/build.gradle b/build.gradle
index caf7e872..4e28073d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -161,6 +161,7 @@ dependencies {
 	runtime 'ch.qos.logback:logback-classic:1.0.13'
 
 	testCompile 'org.testng:testng:6+'
+//	testCompile 'org.apache.jmeter:ApacheJMeter:2.+'
 }
 
 tasks.withType(JavaCompile) {
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 41d03a38..6a597d15 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java
@@ -12,8 +12,7 @@ final class AlgorithmHelper {
 
 	// Constructor
 
-	private AlgorithmHelper() {
-	}
+	private AlgorithmHelper() { }
 
 	// Public static methods
 
diff --git a/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java
similarity index 71%
rename from src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java
rename to src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java
index b788319d..bff55d02 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java
@@ -11,15 +11,16 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.Collection;
 import java.util.GregorianCalendar;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
-import java.util.TreeMap;
 import java.util.TreeSet;
 
 import org.slf4j.Logger;
@@ -34,17 +35,9 @@ import org.testng.annotations.Test;
  * time of 5 runs for each different algorithm and isochrone is
  * stored, to account for changed test conditions.
  */
-public final class RuntimeComplex {
-	private static final Logger LOGGER = LoggerFactory.getLogger(RuntimeComplex.class);
+public final class AlgorithmRuntimeTest {
+	private static final Logger LOGGER = LoggerFactory.getLogger(AlgorithmRuntimeTest.class);
 	private static final int REPEAT_COUNT = 5;
-	private static final int BZ_NODE_ID = 2000500;
-	private static final Calendar BZ_TIME = new GregorianCalendar(2011, 5, 10, 10, 10, 0);
-	private static final int SF_NODE_ID = 21355;
-	private static final Calendar SF_TIME = new GregorianCalendar(2010, 9, 6, 9, 50, 0);
-	private static final int ST_NODE_ID = 2008706;
-	private static final Calendar ST_TIME = new GregorianCalendar(2010, 6, 14, 10, 30, 0);
-	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;
@@ -56,18 +49,39 @@ public final class RuntimeComplex {
 		3600,	// 1 hour (in sec)
 		86400	// 1 day (in sec)
 	};
-	private static Map<Integer, TestParameters> datasets = new TreeMap<>();
-	private static Map<String, Map<String, Long>> runtimes = new TreeMap<>();
+	private static Map<String, InitParams> initParamsMap;
+	private static List<TestParameters> datsetParams = new ArrayList<>();
+	private static Map<String, Map<String, Long>> runtimes = new LinkedHashMap<>();
+	private static Set<Integer> times;
+	private static Set<String> datasetsAdded = new HashSet<>();
+	// InitParams (class and initialization)
+	private static final class InitParams {
+		private final int nodeId;
+		private final Calendar time;
+
+		private InitParams(final int nodeId, final Calendar time) {
+			this.nodeId = nodeId;
+			this.time = time;
+		}
+	}
+	static {
+		initParamsMap = new HashMap<>();
+		// CHECKSTYLE:OFF MagicNumber
+		initParamsMap.put("bz", new InitParams(2000500, new GregorianCalendar(2011, 5, 10, 10, 10, 0)));
+		initParamsMap.put("it", new InitParams(21, new GregorianCalendar(2011, 9, 20, 15, 0, 0)));
+		initParamsMap.put("sf", new InitParams(21355, new GregorianCalendar(2010, 9, 6, 9, 50, 0)));
+		initParamsMap.put("st", new InitParams(2008706, new GregorianCalendar(2010, 6, 14, 10, 30, 0)));
+		// CHECKSTYLE:ON MagicNumber
+	}
 
 	// Launcher method (main method) for visualVM
 
 	public static void main(final String[] args) {
-		final RuntimeComplex o = new RuntimeComplex();
-//		addAllDatasets();
-
-		final Set<Integer> times = new HashSet<>();
+		final AlgorithmRuntimeTest o = new AlgorithmRuntimeTest();
+//		o.initTimeAndParamSet();
+		times = new HashSet<>();
 		times.add(MAX_RUNTIME);
-		addDatasetBZ(times);
+		addDatasetBZ();
 
 		System.out.println("Starting profiling:");
 		long startTimeOverall = Calendar.getInstance().getTimeInMillis();
@@ -94,12 +108,12 @@ public final class RuntimeComplex {
 	}
 
 	@BeforeClass
-	public static void addAllDatasets() {
-		final Set<Integer> times = getTimeSet();
-		addDatasetBZ(times);
-//		addDatasetIT(times);
-//		addDatasetSF(times);
-//		addDatasetST(times);
+	public static void initTimeAndParamSet() {
+		initTimeSet();
+		addDatasetBZ();
+//		addDatasetIT();
+//		addDatasetSF();
+//		addDatasetST();
 	}
 
 	// Public methods
@@ -121,60 +135,61 @@ public final class RuntimeComplex {
 
 	// Private static methods
 
-	private static void addDatasetBZ(final Set<Integer> times) {
-		int i = 0;
+	private static synchronized void addDataset(final String datasetName) {
+		if (datasetsAdded.contains(datasetName)) {
+			return;
+		}
+
+		datasetsAdded.add(datasetName);
+		final InitParams iParams = initParamsMap.get(datasetName);
 		for (final Integer time : times) {
-			datasets.put(i++, new TestParameters(WALKING_SPEED, time, BZ_TIME, MODE, BZ_NODE_ID, "bz", DIRECTION));
+			datsetParams.add(new TestParameters(WALKING_SPEED, time, iParams.time, MODE, iParams.nodeId, datasetName, DIRECTION));
 		}
 	}
 
+	private static synchronized void addDatasetBZ() {
+		addDataset("bz");
+	}
+
 	@SuppressWarnings("unused")
-	private static void addDatasetIT(final Set<Integer> times) {
-		int i = 0;
-		for (final Integer time : times) {
-			datasets.put(i++, new TestParameters(WALKING_SPEED, time, IT_TIME, MODE, IT_NODE_ID, "it", DIRECTION));
-		}
+	private static synchronized void addDatasetIT() {
+		addDataset("it");
 	}
 
 	@SuppressWarnings("unused")
-	private static void addDatasetSF(final Set<Integer> times) {
-		int i = 0;
-		for (final Integer time : times) {
-			datasets.put(i++, new TestParameters(WALKING_SPEED, time, SF_TIME, MODE, SF_NODE_ID, "sf", DIRECTION));
-		}
+	private static synchronized void addDatasetSF() {
+		addDataset("sf");
 	}
 
 	@SuppressWarnings("unused")
-	private static void addDatasetST(final Set<Integer> times) {
-		int i = 0;
-		for (final Integer time : times) {
-			datasets.put(i++, new TestParameters(WALKING_SPEED, time, ST_TIME, MODE, ST_NODE_ID, "st", DIRECTION));
-		}
+	private static synchronized void addDatasetST() {
+		addDataset("st");
 	}
 
-	private static Set<Integer> getTimeSet() {
-		final Set<Integer> times = new TreeSet<Integer>();
+	private static synchronized void initTimeSet() {
+		if (times != null) {
+			return;
+		}
+
+		times = new TreeSet<Integer>();
 		for (int offset : RUNTIME_OFFSETS) {
 			int stepWidth = (offset / RUNTIME_POINTS_PER_OFFSET);
 			for (int i = 0; i < offset; i += stepWidth) {
 				int runtime = Math.max(offset, offset * i);
 				if (runtime > MAX_RUNTIME) {
-					return times;
+					return;
 				}
 
 				times.add(runtime);
 			}
 		}
-
-		return times;
 	}
 
 	private static void runForAllDatasets(final Class<? extends Isochrone> clazz) {
 		LOGGER.info("Executing " + clazz.getSimpleName());
 		long runTimeOverall = 0;
 
-		final Collection<TestParameters> allParams = datasets.values();
-		for (final TestParameters params : allParams) {
+		for (final TestParameters params : datsetParams) {
 			long startTime = Calendar.getInstance().getTimeInMillis();
 			AlgorithmHelper.run(clazz, params);
 
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 03c1ef8a..94f0b0e4 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java
@@ -1,5 +1,6 @@
 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;
@@ -9,9 +10,13 @@ import it.unibz.inf.isochrone.util.EnumContainer.Mode;
 import java.util.Calendar;
 import java.util.GregorianCalendar;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
 
 public class AlgorithmTest {
+	private static final Logger LOGGER = LoggerFactory.getLogger(AlgorithmTest.class);
+	// local test parameters
 	private static final String DATASET = "bz";
 	private static final Double WALKING_SPEED = 1.0;
 	private static final int DURATION = 50;
@@ -20,27 +25,73 @@ public class AlgorithmTest {
 	private static final Mode MODE = Mode.MULTIMODAL;
 	private static final Direction DIRECTION = Direction.INCOMING;
 
-	// Public methodd
+	// Public methods
 
 	@Test
-	public void testMDijkstra() {
-		AlgorithmHelper.run(MDijkstra.class, getParams(), false);
+	public void testMDijkstraDefault() {
+		runDefault(MDijkstra.class, false);
 	}
 
 	@Test
-	public void testMineX() {
-		AlgorithmHelper.run(MineX.class, getParams());
+	public void testMDijkstraLocal() {
+		runLocal(MDijkstra.class, false);
 	}
 
 	@Test
-	public void testMrneX() {
-		AlgorithmHelper.run(MrneX.class, getParams());
+	public void testMineXDefault() {
+		runDefault(MineX.class);
 	}
 
-	// Private methods
+	@Test
+	public void testMineXLocal() {
+		runLocal(MineX.class);
+	}
+
+	@Test
+	public void testMrneXDefault() {
+		runDefault(MrneX.class);
+	}
+
+	@Test
+	public void testMrneXLocal() {
+		runLocal(MrneX.class);
+	}
+
+	// Private static methods
 
-	private static TestParameters getParams() {
+	private static TestParameters getParamsDefault() {
+		return new TestParameters();
+	}
+
+	private static TestParameters getParamsLocal() {
 		return new TestParameters(WALKING_SPEED, DURATION, TIME, MODE, STARTNODE_ID, DATASET, DIRECTION);
 	}
 
+	private static void runDefault(final Class<? extends Isochrone> algorithmClass) {
+		runDefault(algorithmClass, true);
+	}
+
+	private static void runDefault(final Class<? extends Isochrone> algorithmClass, final boolean expireNodes) {
+		LOGGER.info("Executing \"" + algorithmClass.getSimpleName() + "\" (with default test parameters)");
+		final TestParameters params = getParamsDefault();
+		long startTime = Calendar.getInstance().getTimeInMillis();
+		AlgorithmHelper.run(algorithmClass, params, expireNodes);
+		long runTime = Calendar.getInstance().getTimeInMillis() - startTime;
+		LOGGER.info(" - runtime: \"" + params.getRuntime() + "\": " + runTime + "msec");
+		LOGGER.info("-----------------------------");
+	}
+
+	private static void runLocal(final Class<? extends Isochrone> algorithmClass) {
+		runLocal(algorithmClass, true);
+	}
+
+	private static void runLocal(final Class<? extends Isochrone> algorithmClass, final boolean expireNodes) {
+		LOGGER.info("Executing \"" + algorithmClass.getSimpleName() + "\" (with local test parameters)");
+		final TestParameters params = getParamsLocal();
+		long startTime = Calendar.getInstance().getTimeInMillis();
+		AlgorithmHelper.run(algorithmClass, params, expireNodes);
+		long runTime = Calendar.getInstance().getTimeInMillis() - startTime;
+		LOGGER.info(" - runtime: \"" + params.getRuntime() + "\": " + runTime + "msec");
+		LOGGER.info("-----------------------------");
+	}
 }
diff --git a/src/test/java/it/unibz/inf/isochrone/network/RuntimeSimple.java b/src/test/java/it/unibz/inf/isochrone/network/RuntimeSimple.java
deleted file mode 100644
index 408d11c8..00000000
--- a/src/test/java/it/unibz/inf/isochrone/network/RuntimeSimple.java
+++ /dev/null
@@ -1,54 +0,0 @@
-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 java.util.Calendar;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.Test;
-
-/**
- * Performance test class that measures performance of one algorithm
- * at one time.  Change the algorithm in the main method to change the
- * algorithm that should be run on.
- *
- * Change the invocation for the Parameters class to change which
- * isochrone should be computed.
- */
-public final class RuntimeSimple {
-	private static final Logger LOGGER = LoggerFactory.getLogger(RuntimeSimple.class);
-
-	// Public methods
-
-	@Test
-	public void runMDijkstra() {
-		run(MDijkstra.class);
-	}
-
-	@Test
-	public void runMineX() {
-		run(MineX.class);
-	}
-
-	@Test
-	public void runMrneX() {
-		run(MrneX.class);
-	}
-
-	// Private static methods
-
-	private static void run(final Class<? extends Isochrone> algorithmClass) {
-		LOGGER.info("Executing \"" + algorithmClass.getSimpleName() + "\"");
-		final TestParameters params = new TestParameters();
-		long startTime = Calendar.getInstance().getTimeInMillis();
-		AlgorithmHelper.run(algorithmClass, params);
-		long runTime = Calendar.getInstance().getTimeInMillis() - startTime;
-		LOGGER.info(" - runtime: \"" + params.getRuntime() + "\": " + runTime + "msec");
-		LOGGER.info("-----------------------------");
-	}
-
-}
-- 
GitLab