From 66fd725d12ec558fd0a2ff14b4eb1c89fb008752 Mon Sep 17 00:00:00 2001
From: Christian Wulf <chw@informatik.uni-kiel.de>
Date: Tue, 24 Jun 2014 19:09:13 +0200
Subject: [PATCH] refactored all tests to PerformanceTests; added
 MeasurementRepository

---
 .../framework/core/AbstractStage.java         |  3 ---
 .../methodcall/framework/core/Pipeline.java   |  8 ++++----
 .../methodcall/framework/core/Stage.java      |  5 +++++
 .../variant/methodcall/stage/EndStage.java    | 16 +++++++--------
 .../methodcall/stage/ObjectProducer.java      | 11 +++-------
 .../ThroughputTimestampAnalysisTest.java      | 20 +++++--------------
 .../throughput/ThroughputAnalysisTest.java    | 15 +++-----------
 .../ThroughputTimestampAnalysisTest.java      | 16 ++-------------
 ...odCallThoughputTimestampAnalysis1Test.java | 14 ++-----------
 .../MethodCallThroughputAnalysis1.java        |  6 ++----
 ...odCallThoughputTimestampAnalysis2Test.java | 14 ++-----------
 ...odCallThoughputTimestampAnalysis3Test.java | 14 ++-----------
 ...odCallThoughputTimestampAnalysis4Test.java | 14 ++-----------
 .../MethodCallThroughputAnalysis5.java        |  2 +-
 ...odCallThoughputTimestampAnalysis6Test.java | 17 ++--------------
 ...odCallThoughputTimestampAnalysis7Test.java | 17 ++--------------
 .../MethodCallThroughputAnalysis7.java        |  1 +
 ...odCallThoughputTimestampAnalysis8Test.java | 14 ++-----------
 ...dCallThoughputTimestampAnalysis12Test.java | 14 ++-----------
 ...dCallThoughputTimestampAnalysis13Test.java | 14 ++-----------
 .../MethodCallThroughputAnalysis13.java       |  7 +++----
 ...odCallThoughputTimestampAnalysis9Test.java | 14 ++-----------
 ...dCallThoughputTimestampAnalysis10Test.java | 14 ++-----------
 ...dCallThoughputTimestampAnalysis11Test.java | 14 ++-----------
 ...dCallThoughputTimestampAnalysis14Test.java | 14 ++-----------
 ...dCallThoughputTimestampAnalysis15Test.java | 14 ++-----------
 ...dCallThoughputTimestampAnalysis16Test.java | 14 ++-----------
 ...dCallThoughputTimestampAnalysis17Test.java | 14 ++-----------
 src/test/java/test/MeasurementRepository.java | 10 ++++++++++
 src/test/java/test/PerformanceResult.java     |  5 +++++
 30 files changed, 83 insertions(+), 272 deletions(-)
 create mode 100644 src/test/java/test/MeasurementRepository.java
 create mode 100644 src/test/java/test/PerformanceResult.java

diff --git a/src/main/java/teetime/variant/methodcall/framework/core/AbstractStage.java b/src/main/java/teetime/variant/methodcall/framework/core/AbstractStage.java
index 3fa3175e..1d55b0ba 100644
--- a/src/main/java/teetime/variant/methodcall/framework/core/AbstractStage.java
+++ b/src/main/java/teetime/variant/methodcall/framework/core/AbstractStage.java
@@ -9,8 +9,6 @@ public abstract class AbstractStage<I, O> implements Stage<I, O> {
 
 	private Stage<?, ?> parentStage;
 
-	private int index;
-
 	private Stage<?, ?> successor;
 
 	private boolean reschedulable;
@@ -73,7 +71,6 @@ public abstract class AbstractStage<I, O> implements Stage<I, O> {
 
 	@Override
 	public void setParentStage(final Stage<?, ?> parentStage, final int index) {
-		this.index = index;
 		this.parentStage = parentStage;
 	}
 
diff --git a/src/main/java/teetime/variant/methodcall/framework/core/Pipeline.java b/src/main/java/teetime/variant/methodcall/framework/core/Pipeline.java
index 0309da6e..57dcbbad 100644
--- a/src/main/java/teetime/variant/methodcall/framework/core/Pipeline.java
+++ b/src/main/java/teetime/variant/methodcall/framework/core/Pipeline.java
@@ -142,13 +142,13 @@ public class Pipeline<I, O> implements Stage<I, O> {
 		throw new IllegalStateException();
 	}
 
+	public void setReschedulable(final boolean reschedulable) {
+		this.reschedulable = reschedulable;
+	}
+
 	@Override
 	public boolean isReschedulable() {
 		return this.reschedulable;
 	}
 
-	public void setReschedulable(final boolean reschedulable) {
-		this.reschedulable = reschedulable;
-	}
-
 }
diff --git a/src/main/java/teetime/variant/methodcall/framework/core/Stage.java b/src/main/java/teetime/variant/methodcall/framework/core/Stage.java
index c8914350..2ab689b1 100644
--- a/src/main/java/teetime/variant/methodcall/framework/core/Stage.java
+++ b/src/main/java/teetime/variant/methodcall/framework/core/Stage.java
@@ -24,6 +24,11 @@ public interface Stage<I, O> {
 
 	void setSuccessor(Stage<? super O, ?> successor);
 
+	/**
+	 * Used for execute4() (experiment02)
+	 * 
+	 * @return
+	 */
 	boolean isReschedulable();
 
 	void onIsPipelineHead();
diff --git a/src/main/java/teetime/variant/methodcall/stage/EndStage.java b/src/main/java/teetime/variant/methodcall/stage/EndStage.java
index dc791a44..eccd922a 100644
--- a/src/main/java/teetime/variant/methodcall/stage/EndStage.java
+++ b/src/main/java/teetime/variant/methodcall/stage/EndStage.java
@@ -15,7 +15,7 @@ public class EndStage<T> implements Stage<T, T> {
 
 	@Override
 	public T execute(final Object element) {
-		return null;
+		throw new IllegalStateException();
 	}
 
 	@Override
@@ -43,7 +43,6 @@ public class EndStage<T> implements Stage<T, T> {
 
 	@Override
 	public Stage next() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
@@ -53,11 +52,6 @@ public class EndStage<T> implements Stage<T, T> {
 
 	}
 
-	@Override
-	public boolean isReschedulable() {
-		return false;
-	}
-
 	@Override
 	public void onStart() {
 		// TODO Auto-generated method stub
@@ -66,8 +60,12 @@ public class EndStage<T> implements Stage<T, T> {
 
 	@Override
 	public Object executeRecursively(final Object element) {
-		// TODO Auto-generated method stub
-		return null;
+		return element;
+	}
+
+	@Override
+	public boolean isReschedulable() {
+		return false;
 	}
 
 }
diff --git a/src/main/java/teetime/variant/methodcall/stage/ObjectProducer.java b/src/main/java/teetime/variant/methodcall/stage/ObjectProducer.java
index 0a50a69d..540a81da 100644
--- a/src/main/java/teetime/variant/methodcall/stage/ObjectProducer.java
+++ b/src/main/java/teetime/variant/methodcall/stage/ObjectProducer.java
@@ -39,20 +39,15 @@ public class ObjectProducer<T> extends ProducerStage<Void, T> {
 
 	@Override
 	public T execute(final Object element) {
-		// if (this.numInputObjects == 0) {
-		// // this.setReschedulable(false);
-		// return null;
-		// }
+		if (this.numInputObjects == 0) {
+			return null;
+		}
 
 		try {
 			final T newObject = this.inputObjectCreator.create();
 			// final T newObject = null;
 			this.numInputObjects--;
 
-			if (this.numInputObjects == 0) {
-				this.setReschedulable(false);
-			}
-
 			return newObject;
 		} catch (final Exception e) {
 			throw new IllegalStateException(e);
diff --git a/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java b/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java
index 8e5aa3e2..e64266ed 100644
--- a/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java
+++ b/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java
@@ -19,32 +19,22 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Callable;
 
-import kieker.analysis.examples.ThroughputTimestampAnalysis;
-import kieker.analysis.exception.AnalysisConfigurationException;
-import kieker.common.logging.LogFactory;
-
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
+import test.PerformanceTest;
 
+import kieker.analysis.examples.ThroughputTimestampAnalysis;
+import kieker.analysis.exception.AnalysisConfigurationException;
 
 /**
  * @author Nils Christian Ehmke
- *
+ * 
  * @since 1.10
  */
-public class ThroughputTimestampAnalysisTest {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class ThroughputTimestampAnalysisTest extends PerformanceTest {
 
 	@Test
 	public void testWithManyObjects() throws IllegalStateException, AnalysisConfigurationException {
diff --git a/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputAnalysisTest.java b/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputAnalysisTest.java
index cadace42..677abf64 100644
--- a/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputAnalysisTest.java
+++ b/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputAnalysisTest.java
@@ -17,29 +17,20 @@ package teetime.variant.explicitScheduling.examples.throughput;
 
 import java.util.concurrent.Callable;
 
-import kieker.common.logging.LogFactory;
-
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.StopWatch;
-import teetime.variant.explicitScheduling.examples.throughput.ThroughputAnalysis;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
- *
+ * 
  * @since 1.10
  */
-public class ThroughputAnalysisTest {
+public class ThroughputAnalysisTest extends PerformanceTest {
 
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
 	private static final int numRuns = 2;
 
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
-
 	@Test
 	public void testWithMultipleRuns() {
 		final StopWatch stopWatch = new StopWatch();
diff --git a/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputTimestampAnalysisTest.java b/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputTimestampAnalysisTest.java
index 96f0aac2..998a447a 100644
--- a/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputTimestampAnalysisTest.java
+++ b/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputTimestampAnalysisTest.java
@@ -19,30 +19,18 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Callable;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
-import teetime.variant.explicitScheduling.examples.throughput.ThroughputTimestampAnalysis;
-import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class ThroughputTimestampAnalysisTest {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class ThroughputTimestampAnalysisTest extends PerformanceTest {
 
 	@Test
 	public void testWithManyObjects() {
diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThoughputTimestampAnalysis1Test.java b/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThoughputTimestampAnalysis1Test.java
index 362f3426..aa1b32ab 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThoughputTimestampAnalysis1Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThoughputTimestampAnalysis1Test.java
@@ -18,30 +18,20 @@ package teetime.variant.methodcall.examples.experiment01;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis1Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class MethodCallThoughputTimestampAnalysis1Test extends PerformanceTest {
 
 	// 500 times faster than our new framework
 	// TODO check why
diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThroughputAnalysis1.java b/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThroughputAnalysis1.java
index f5a71bf9..aac7fca2 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThroughputAnalysis1.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThroughputAnalysis1.java
@@ -65,12 +65,10 @@ public class MethodCallThroughputAnalysis1 extends Analysis {
 			@Override
 			public void run() {
 				while (true) {
-					if (!objectProducer.isReschedulable()) {
+					TimestampObject object = objectProducer.execute(null);
+					if (object == null) {
 						return;
 					}
-					TimestampObject object = objectProducer.execute(null);
-					// if (object == null)
-					// return;
 
 					object = startTimestampFilter.execute(object);
 					for (final NoopFilter<TimestampObject> noopFilter : noopFilters) {
diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment02/MethodCallThoughputTimestampAnalysis2Test.java b/src/test/java/teetime/variant/methodcall/examples/experiment02/MethodCallThoughputTimestampAnalysis2Test.java
index 52a5cb25..08bb6967 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment02/MethodCallThoughputTimestampAnalysis2Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment02/MethodCallThoughputTimestampAnalysis2Test.java
@@ -18,30 +18,20 @@ package teetime.variant.methodcall.examples.experiment02;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis2Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class MethodCallThoughputTimestampAnalysis2Test extends PerformanceTest {
 
 	// 500 times faster than our new framework
 	// TODO check why
diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment03/MethodCallThoughputTimestampAnalysis3Test.java b/src/test/java/teetime/variant/methodcall/examples/experiment03/MethodCallThoughputTimestampAnalysis3Test.java
index 0364bc93..65020939 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment03/MethodCallThoughputTimestampAnalysis3Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment03/MethodCallThoughputTimestampAnalysis3Test.java
@@ -18,30 +18,20 @@ package teetime.variant.methodcall.examples.experiment03;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis3Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class MethodCallThoughputTimestampAnalysis3Test extends PerformanceTest {
 
 	// 500 times faster than our new framework
 	// TODO check why
diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment04/MethodCallThoughputTimestampAnalysis4Test.java b/src/test/java/teetime/variant/methodcall/examples/experiment04/MethodCallThoughputTimestampAnalysis4Test.java
index c6b509c3..a1adcac9 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment04/MethodCallThoughputTimestampAnalysis4Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment04/MethodCallThoughputTimestampAnalysis4Test.java
@@ -18,30 +18,20 @@ package teetime.variant.methodcall.examples.experiment04;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis4Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class MethodCallThoughputTimestampAnalysis4Test extends PerformanceTest {
 
 	// 500 times faster than our new framework
 	// TODO check why
diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment05/MethodCallThroughputAnalysis5.java b/src/test/java/teetime/variant/methodcall/examples/experiment05/MethodCallThroughputAnalysis5.java
index 503eadef..176f09ef 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment05/MethodCallThroughputAnalysis5.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment05/MethodCallThroughputAnalysis5.java
@@ -58,8 +58,8 @@ public class MethodCallThroughputAnalysis5 extends Analysis {
 	 * @param numNoopFilters
 	 * @since 1.10
 	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
 	private Runnable buildPipeline() {
-		@SuppressWarnings("unchecked")
 		final NoopFilter<TimestampObject>[] noopFilters = new NoopFilter[this.numNoopFilters];
 		// create stages
 		final ObjectProducer<TimestampObject> objectProducer = new ObjectProducer<TimestampObject>(this.numInputObjects, this.inputObjectCreator);
diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment06/MethodCallThoughputTimestampAnalysis6Test.java b/src/test/java/teetime/variant/methodcall/examples/experiment06/MethodCallThoughputTimestampAnalysis6Test.java
index d1e00ef9..126742c2 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment06/MethodCallThoughputTimestampAnalysis6Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment06/MethodCallThoughputTimestampAnalysis6Test.java
@@ -18,33 +18,20 @@ package teetime.variant.methodcall.examples.experiment06;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis6Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
-
-	// 500 times faster than our new framework
-	// TODO check why
+public class MethodCallThoughputTimestampAnalysis6Test extends PerformanceTest {
 
 	@Test
 	public void testWithManyObjects() {
diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment07/MethodCallThoughputTimestampAnalysis7Test.java b/src/test/java/teetime/variant/methodcall/examples/experiment07/MethodCallThoughputTimestampAnalysis7Test.java
index 729150eb..050d96d4 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment07/MethodCallThoughputTimestampAnalysis7Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment07/MethodCallThoughputTimestampAnalysis7Test.java
@@ -18,33 +18,20 @@ package teetime.variant.methodcall.examples.experiment07;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis7Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
-
-	// 500 times faster than our new framework
-	// TODO check why
+public class MethodCallThoughputTimestampAnalysis7Test extends PerformanceTest {
 
 	@Test
 	public void testWithManyObjects() {
diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment07/MethodCallThroughputAnalysis7.java b/src/test/java/teetime/variant/methodcall/examples/experiment07/MethodCallThroughputAnalysis7.java
index 9b11230f..29f51446 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment07/MethodCallThroughputAnalysis7.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment07/MethodCallThroughputAnalysis7.java
@@ -58,6 +58,7 @@ public class MethodCallThroughputAnalysis7 extends Analysis {
 	 * @param numNoopFilters
 	 * @since 1.10
 	 */
+	@SuppressWarnings("rawtypes")
 	private Runnable buildPipeline() {
 		@SuppressWarnings("unchecked")
 		final NoopFilter<TimestampObject>[] noopFilters = new NoopFilter[this.numNoopFilters];
diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment08/MethodCallThoughputTimestampAnalysis8Test.java b/src/test/java/teetime/variant/methodcall/examples/experiment08/MethodCallThoughputTimestampAnalysis8Test.java
index 2dac38f1..8ab1b3d8 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment08/MethodCallThoughputTimestampAnalysis8Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment08/MethodCallThoughputTimestampAnalysis8Test.java
@@ -18,30 +18,20 @@ package teetime.variant.methodcall.examples.experiment08;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis8Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class MethodCallThoughputTimestampAnalysis8Test extends PerformanceTest {
 
 	@Test
 	public void testWithManyObjects() {
diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment12/MethodCallThoughputTimestampAnalysis12Test.java b/src/test/java/teetime/variant/methodcall/examples/experiment12/MethodCallThoughputTimestampAnalysis12Test.java
index 2af8e476..c6fe784e 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment12/MethodCallThoughputTimestampAnalysis12Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment12/MethodCallThoughputTimestampAnalysis12Test.java
@@ -18,30 +18,20 @@ package teetime.variant.methodcall.examples.experiment12;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis12Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class MethodCallThoughputTimestampAnalysis12Test extends PerformanceTest {
 
 	@Test
 	public void testWithManyObjects() {
diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment13/MethodCallThoughputTimestampAnalysis13Test.java b/src/test/java/teetime/variant/methodcall/examples/experiment13/MethodCallThoughputTimestampAnalysis13Test.java
index ccc148c1..05449afb 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment13/MethodCallThoughputTimestampAnalysis13Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment13/MethodCallThoughputTimestampAnalysis13Test.java
@@ -18,30 +18,20 @@ package teetime.variant.methodcall.examples.experiment13;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis13Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class MethodCallThoughputTimestampAnalysis13Test extends PerformanceTest {
 
 	@Test
 	public void testWithManyObjects() {
diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment13/MethodCallThroughputAnalysis13.java b/src/test/java/teetime/variant/methodcall/examples/experiment13/MethodCallThroughputAnalysis13.java
index 2795e3bd..edd8b95e 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment13/MethodCallThroughputAnalysis13.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment13/MethodCallThroughputAnalysis13.java
@@ -60,8 +60,8 @@ public class MethodCallThroughputAnalysis13 extends Analysis {
 	 * @param numNoopFilters
 	 * @since 1.10
 	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
 	private Runnable buildPipeline() {
-		@SuppressWarnings("unchecked")
 		final NoopFilter<TimestampObject>[] noopFilters = new NoopFilter[this.numNoopFilters];
 		// create stages
 		final ObjectProducer<TimestampObject> objectProducer = new ObjectProducer<TimestampObject>(this.numInputObjects, this.inputObjectCreator);
@@ -89,11 +89,10 @@ public class MethodCallThroughputAnalysis13 extends Analysis {
 		stages[stages.length - 1].setSuccessor(new EndStage<Object>());
 
 		final WrappingPipeline pipeline = new WrappingPipeline() {
-			private int startIndex;
-
 			@Override
 			public boolean execute() {
-				return stages[0].executeRecursively(null) != null;
+				Object result = stages[0].executeRecursively(null);
+				return result != null;
 			}
 
 		};
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java
index a0aa656b..431e5896 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java
@@ -18,30 +18,20 @@ package teetime.variant.methodcallWithPorts.examples.experiment09;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis9Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class MethodCallThoughputTimestampAnalysis9Test extends PerformanceTest {
 
 	@Test
 	public void testWithManyObjects() {
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment10/MethodCallThoughputTimestampAnalysis10Test.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment10/MethodCallThoughputTimestampAnalysis10Test.java
index 16d44a26..d7a804aa 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment10/MethodCallThoughputTimestampAnalysis10Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment10/MethodCallThoughputTimestampAnalysis10Test.java
@@ -18,30 +18,20 @@ package teetime.variant.methodcallWithPorts.examples.experiment10;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis10Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class MethodCallThoughputTimestampAnalysis10Test extends PerformanceTest {
 
 	@Test
 	public void testWithManyObjects() {
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment11/MethodCallThoughputTimestampAnalysis11Test.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment11/MethodCallThoughputTimestampAnalysis11Test.java
index a6f76d00..4cd04b30 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment11/MethodCallThoughputTimestampAnalysis11Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment11/MethodCallThoughputTimestampAnalysis11Test.java
@@ -18,30 +18,20 @@ package teetime.variant.methodcallWithPorts.examples.experiment11;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis11Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class MethodCallThoughputTimestampAnalysis11Test extends PerformanceTest {
 
 	@Test
 	public void testWithManyObjects() {
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment14/MethodCallThoughputTimestampAnalysis14Test.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment14/MethodCallThoughputTimestampAnalysis14Test.java
index 3a8ccedb..18a9e2a3 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment14/MethodCallThoughputTimestampAnalysis14Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment14/MethodCallThoughputTimestampAnalysis14Test.java
@@ -18,30 +18,20 @@ package teetime.variant.methodcallWithPorts.examples.experiment14;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis14Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class MethodCallThoughputTimestampAnalysis14Test extends PerformanceTest {
 
 	@Test
 	public void testWithManyObjects() {
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment15/MethodCallThoughputTimestampAnalysis15Test.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment15/MethodCallThoughputTimestampAnalysis15Test.java
index 9e7c230c..0d0149f1 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment15/MethodCallThoughputTimestampAnalysis15Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment15/MethodCallThoughputTimestampAnalysis15Test.java
@@ -18,30 +18,20 @@ package teetime.variant.methodcallWithPorts.examples.experiment15;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis15Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class MethodCallThoughputTimestampAnalysis15Test extends PerformanceTest {
 
 	@Test
 	public void testWithManyObjects() {
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment16/MethodCallThoughputTimestampAnalysis16Test.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment16/MethodCallThoughputTimestampAnalysis16Test.java
index e3afce1e..24938afa 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment16/MethodCallThoughputTimestampAnalysis16Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment16/MethodCallThoughputTimestampAnalysis16Test.java
@@ -17,7 +17,6 @@ package teetime.variant.methodcallWithPorts.examples.experiment16;
 
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
@@ -25,23 +24,14 @@ import teetime.util.ListUtil;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis16Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class MethodCallThoughputTimestampAnalysis16Test extends PerformanceTest {
 
 	@Test
 	public void testWithManyObjectsAnd1Thread() {
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment17/MethodCallThoughputTimestampAnalysis17Test.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment17/MethodCallThoughputTimestampAnalysis17Test.java
index c5f9ac19..315b3b57 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment17/MethodCallThoughputTimestampAnalysis17Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment17/MethodCallThoughputTimestampAnalysis17Test.java
@@ -17,7 +17,6 @@ package teetime.variant.methodcallWithPorts.examples.experiment17;
 
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
@@ -25,23 +24,14 @@ import teetime.util.ListUtil;
 import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-
-import kieker.common.logging.LogFactory;
+import test.PerformanceTest;
 
 /**
  * @author Christian Wulf
  * 
  * @since 1.10
  */
-public class MethodCallThoughputTimestampAnalysis17Test {
-
-	private static final int NUM_OBJECTS_TO_CREATE = 100000;
-	private static final int NUM_NOOP_FILTERS = 800;
-
-	@Before
-	public void before() {
-		System.setProperty(LogFactory.CUSTOM_LOGGER_JVM, "NONE");
-	}
+public class MethodCallThoughputTimestampAnalysis17Test extends PerformanceTest {
 
 	@Test
 	public void testWithManyObjects() {
diff --git a/src/test/java/test/MeasurementRepository.java b/src/test/java/test/MeasurementRepository.java
new file mode 100644
index 00000000..03d1219a
--- /dev/null
+++ b/src/test/java/test/MeasurementRepository.java
@@ -0,0 +1,10 @@
+package test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MeasurementRepository {
+
+	public final Map<String, PerformanceResult> performanceResults = new HashMap<String, PerformanceResult>();
+
+}
diff --git a/src/test/java/test/PerformanceResult.java b/src/test/java/test/PerformanceResult.java
new file mode 100644
index 00000000..c4690fa5
--- /dev/null
+++ b/src/test/java/test/PerformanceResult.java
@@ -0,0 +1,5 @@
+package test;
+
+public class PerformanceResult {
+
+}
-- 
GitLab