From 2e1c899f932a2288c5bc0bdbaf0c5f05a7a459e9 Mon Sep 17 00:00:00 2001
From: Christian Wulf <chw@informatik.uni-kiel.de>
Date: Tue, 12 Aug 2014 05:19:07 +0200
Subject: [PATCH] added performance test profiles

---
 pom.xml                                       |  13 +-
 src/main/java/experiment/Experiment1.java     |   2 +-
 src/main/java/experiment/Experiment2.java     |   2 +-
 .../ThroughputTimestampAnalysisTest.java      |   4 +-
 src/test/java/teetime/util/StopWatchTest.java |   2 +
 .../throughput/ThroughputAnalysisTest.java    |   2 +-
 .../ThroughputTimestampAnalysisTest.java      |   4 +-
 .../examples/ChwComparisonMethodcall.java     |   4 +-
 .../examples/NieComparisonMethodcall.java     |   4 +-
 ...odCallThoughputTimestampAnalysis1Test.java |   6 +-
 ...odCallThoughputTimestampAnalysis2Test.java |   2 +-
 ...odCallThoughputTimestampAnalysis3Test.java |   2 +-
 ...odCallThoughputTimestampAnalysis4Test.java |   2 +-
 ...odCallThoughputTimestampAnalysis5Test.java |   2 +-
 ...odCallThoughputTimestampAnalysis6Test.java |   2 +-
 ...odCallThoughputTimestampAnalysis7Test.java |   2 +-
 ...odCallThoughputTimestampAnalysis8Test.java |   2 +-
 ...dCallThoughputTimestampAnalysis12Test.java |   2 +-
 ...dCallThoughputTimestampAnalysis13Test.java |   2 +-
 .../ChwHomeComparisonMethodcallWithPorts.java | 116 ++++++++++++++++++
 ...ChwWorkComparisonMethodcallWithPorts.java} |  49 ++------
 .../ComparisonMethodcallWithPorts.java        |  48 ++++++++
 ...NieWorkComparisonMethodcallWithPorts.java} |  43 ++-----
 ...odCallThoughputTimestampAnalysis9Test.java |   2 +-
 ...dCallThoughputTimestampAnalysis10Test.java |   2 +-
 ...dCallThoughputTimestampAnalysis11Test.java |   2 +-
 ...dCallThoughputTimestampAnalysis14Test.java |   2 +-
 ...dCallThoughputTimestampAnalysis15Test.java |   2 +-
 .../experiment16/ChwHomePerformanceCheck.java |  33 +++++
 .../experiment16/ChwWorkPerformanceCheck.java |  33 +++++
 ...dCallThoughputTimestampAnalysis16Test.java |  33 ++---
 ...dCallThoughputTimestampAnalysis17Test.java |   2 +-
 ...dCallThoughputTimestampAnalysis19Test.java |   2 +-
 .../examples/kiekerdays/TimingsReader.java    |   2 +-
 .../ChwHomeTcpTraceReadingTest.java           |   2 +-
 ...omeTcpTraceReconstructionAnalysisTest.java |   2 +-
 ...hwHomeTraceReconstructionAnalysisTest.java |   2 +-
 ...orkTcpTraceReconstructionAnalysisTest.java |   2 +-
 ...hwWorkTraceReconstructionAnalysisTest.java |   2 +-
 ...KiekerTraceReconstructionAnalysisTest.java |   2 +-
 ...ReconstructionAnalysisWithThreadsTest.java |   2 +-
 ...ReconstructionAnalysisWithThreadsTest.java |   2 +-
 ...TraceReductionAnalysisWithThreadsTest.java |   2 +-
 .../{test => util}/MeasurementRepository.java |   2 +-
 .../java/util/PerformanceCheckProfile.java    |   9 ++
 .../PerformanceCheckProfileRepository.java    |  35 ++++++
 .../{test => util}/PerformanceResult.java     |   4 +-
 .../java/{test => util}/PerformanceTest.java  |   3 +-
 .../java}/util/StatisticsUtil.java            |   4 +-
 49 files changed, 369 insertions(+), 138 deletions(-)
 create mode 100644 src/test/java/teetime/variant/methodcallWithPorts/examples/ChwHomeComparisonMethodcallWithPorts.java
 rename src/test/java/teetime/variant/methodcallWithPorts/examples/{ChwComparisonMethodcallWithPorts.java => ChwWorkComparisonMethodcallWithPorts.java} (75%)
 create mode 100644 src/test/java/teetime/variant/methodcallWithPorts/examples/ComparisonMethodcallWithPorts.java
 rename src/test/java/teetime/variant/methodcallWithPorts/examples/{NieComparisonMethodcallWithPorts.java => NieWorkComparisonMethodcallWithPorts.java} (70%)
 create mode 100644 src/test/java/teetime/variant/methodcallWithPorts/examples/experiment16/ChwHomePerformanceCheck.java
 create mode 100644 src/test/java/teetime/variant/methodcallWithPorts/examples/experiment16/ChwWorkPerformanceCheck.java
 rename src/test/java/{test => util}/MeasurementRepository.java (93%)
 create mode 100644 src/test/java/util/PerformanceCheckProfile.java
 create mode 100644 src/test/java/util/PerformanceCheckProfileRepository.java
 rename src/test/java/{test => util}/PerformanceResult.java (94%)
 rename src/test/java/{test => util}/PerformanceTest.java (97%)
 rename src/{main/java/teetime => test/java}/util/StatisticsUtil.java (98%)

diff --git a/pom.xml b/pom.xml
index 67d94dc9..5a2b1e31 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,11 +33,13 @@
 			<groupId>org.hamcrest</groupId>
 			<artifactId>hamcrest-core</artifactId>
 			<version>1.3</version>
+			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>org.hamcrest</groupId>
 			<artifactId>hamcrest-library</artifactId>
 			<version>1.3</version>
+			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.kieker-monitoring</groupId>
@@ -53,11 +55,13 @@
 			<groupId>ch.qos.logback</groupId>
 			<artifactId>logback-classic</artifactId>
 			<version>1.1.2</version>
+			<scope>runtime</scope>
 		</dependency>
 		<dependency>
 			<groupId>org.codehaus.groovy</groupId>
 			<artifactId>groovy-all</artifactId>
 			<version>2.3.6</version>
+			<scope>runtime</scope>
 		</dependency>
 		<dependency>
 			<groupId>com.google.guava</groupId>
@@ -79,12 +83,19 @@
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-compiler-plugin</artifactId>
+
 				<configuration>
 					<source>1.6</source>
 					<target>1.6</target>
 				</configuration>
 			</plugin>
 
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>versions-maven-plugin</artifactId>
+				<version>2.1</version>
+			</plugin>
+
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-shade-plugin</artifactId>
@@ -97,7 +108,7 @@
 					</execution>
 				</executions>
 				<configuration>
-					<finalName>uber-${artifactId}-${version}</finalName>
+					<finalName>${project.artifactId}-${project.version}</finalName>
 				</configuration>
 			</plugin>
 		</plugins>
diff --git a/src/main/java/experiment/Experiment1.java b/src/main/java/experiment/Experiment1.java
index ef49b2c0..8793f7d0 100644
--- a/src/main/java/experiment/Experiment1.java
+++ b/src/main/java/experiment/Experiment1.java
@@ -24,7 +24,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Callable;
 
-import teetime.util.StatisticsUtil;
 import teetime.variant.explicitScheduling.framework.concurrent.StageTerminationPolicy;
 import teetime.variant.explicitScheduling.framework.concurrent.WorkerThread;
 import teetime.variant.explicitScheduling.framework.core.Analysis;
@@ -33,6 +32,7 @@ import teetime.variant.explicitScheduling.framework.core.Pipeline;
 import teetime.variant.explicitScheduling.framework.sequential.MethodCallPipe;
 import teetime.variant.explicitScheduling.framework.sequential.QueuePipe;
 import teetime.variant.explicitScheduling.stage.NoopFilter;
+import util.StatisticsUtil;
 
 import kieker.analysis.AnalysisController;
 import kieker.analysis.IAnalysisController;
diff --git a/src/main/java/experiment/Experiment2.java b/src/main/java/experiment/Experiment2.java
index 13c08fc8..8f488558 100644
--- a/src/main/java/experiment/Experiment2.java
+++ b/src/main/java/experiment/Experiment2.java
@@ -34,7 +34,6 @@ import kieker.analysis.stage.StartTimestampFilter;
 import kieker.analysis.stage.StopTimestampFilter;
 import kieker.common.configuration.Configuration;
 
-import teetime.util.StatisticsUtil;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
 import teetime.variant.explicitScheduling.framework.concurrent.WorkerThread;
 import teetime.variant.explicitScheduling.framework.core.Analysis;
@@ -43,6 +42,7 @@ import teetime.variant.explicitScheduling.framework.core.Pipeline;
 import teetime.variant.explicitScheduling.framework.sequential.MethodCallPipe;
 import teetime.variant.explicitScheduling.framework.sequential.QueuePipe;
 import teetime.variant.explicitScheduling.stage.NoopFilter;
+import util.StatisticsUtil;
 
 /**
  * @author Nils Christian Ehmke
diff --git a/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java b/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java
index e4177ad8..3bbd1bb9 100644
--- a/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java
+++ b/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java
@@ -21,10 +21,10 @@ import java.util.concurrent.Callable;
 
 import org.junit.Test;
 
-import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
+import util.StatisticsUtil;
 
 import kieker.analysis.examples.ThroughputTimestampAnalysis;
 import kieker.analysis.exception.AnalysisConfigurationException;
diff --git a/src/test/java/teetime/util/StopWatchTest.java b/src/test/java/teetime/util/StopWatchTest.java
index d61450e9..6ecf46a0 100644
--- a/src/test/java/teetime/util/StopWatchTest.java
+++ b/src/test/java/teetime/util/StopWatchTest.java
@@ -7,6 +7,8 @@ import java.util.Map;
 
 import org.junit.Test;
 
+import util.StatisticsUtil;
+
 public class StopWatchTest {
 
 	private static final int NUM_ITERATIONS = 1000000;
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 677abf64..d4fb3f2d 100644
--- a/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputAnalysisTest.java
+++ b/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputAnalysisTest.java
@@ -20,7 +20,7 @@ import java.util.concurrent.Callable;
 import org.junit.Test;
 
 import teetime.util.StopWatch;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
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 df305466..d6a3a393 100644
--- a/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputTimestampAnalysisTest.java
+++ b/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputTimestampAnalysisTest.java
@@ -21,9 +21,9 @@ import java.util.concurrent.Callable;
 
 import org.junit.Test;
 
-import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
-import test.PerformanceTest;
+import util.PerformanceTest;
+import util.StatisticsUtil;
 
 /**
  * @author Christian Wulf
diff --git a/src/test/java/teetime/variant/methodcall/examples/ChwComparisonMethodcall.java b/src/test/java/teetime/variant/methodcall/examples/ChwComparisonMethodcall.java
index 4c407987..084b8f39 100644
--- a/src/test/java/teetime/variant/methodcall/examples/ChwComparisonMethodcall.java
+++ b/src/test/java/teetime/variant/methodcall/examples/ChwComparisonMethodcall.java
@@ -20,8 +20,8 @@ import teetime.variant.methodcall.examples.experiment07.MethodCallThoughputTimes
 import teetime.variant.methodcall.examples.experiment08.MethodCallThoughputTimestampAnalysis8Test;
 import teetime.variant.methodcall.examples.experiment12.MethodCallThoughputTimestampAnalysis12Test;
 import teetime.variant.methodcall.examples.experiment13.MethodCallThoughputTimestampAnalysis13Test;
-import test.PerformanceResult;
-import test.PerformanceTest;
+import util.PerformanceResult;
+import util.PerformanceTest;
 
 @RunWith(Suite.class)
 @SuiteClasses({
diff --git a/src/test/java/teetime/variant/methodcall/examples/NieComparisonMethodcall.java b/src/test/java/teetime/variant/methodcall/examples/NieComparisonMethodcall.java
index c4ac6dc7..ba1ff285 100644
--- a/src/test/java/teetime/variant/methodcall/examples/NieComparisonMethodcall.java
+++ b/src/test/java/teetime/variant/methodcall/examples/NieComparisonMethodcall.java
@@ -20,8 +20,8 @@ import teetime.variant.methodcall.examples.experiment07.MethodCallThoughputTimes
 import teetime.variant.methodcall.examples.experiment08.MethodCallThoughputTimestampAnalysis8Test;
 import teetime.variant.methodcall.examples.experiment12.MethodCallThoughputTimestampAnalysis12Test;
 import teetime.variant.methodcall.examples.experiment13.MethodCallThoughputTimestampAnalysis13Test;
-import test.PerformanceResult;
-import test.PerformanceTest;
+import util.PerformanceResult;
+import util.PerformanceTest;
 
 @RunWith(Suite.class)
 @SuiteClasses({
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 8c6362ba..45a41b5c 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThoughputTimestampAnalysis1Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThoughputTimestampAnalysis1Test.java
@@ -20,10 +20,10 @@ import static org.junit.Assert.assertEquals;
 import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
-import teetime.util.StatisticsUtil;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceResult;
-import test.PerformanceTest;
+import util.PerformanceResult;
+import util.PerformanceTest;
+import util.StatisticsUtil;
 
 /**
  * @author Christian Wulf
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 20da6308..a8f7c001 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment02/MethodCallThoughputTimestampAnalysis2Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment02/MethodCallThoughputTimestampAnalysis2Test.java
@@ -19,7 +19,7 @@ import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
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 0bfc8205..f0254708 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment03/MethodCallThoughputTimestampAnalysis3Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment03/MethodCallThoughputTimestampAnalysis3Test.java
@@ -19,7 +19,7 @@ import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
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 ba5f8095..bc5b0ea5 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment04/MethodCallThoughputTimestampAnalysis4Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment04/MethodCallThoughputTimestampAnalysis4Test.java
@@ -19,7 +19,7 @@ import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment05/MethodCallThoughputTimestampAnalysis5Test.java b/src/test/java/teetime/variant/methodcall/examples/experiment05/MethodCallThoughputTimestampAnalysis5Test.java
index 22c2ec2b..6922fc2a 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment05/MethodCallThoughputTimestampAnalysis5Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment05/MethodCallThoughputTimestampAnalysis5Test.java
@@ -19,7 +19,7 @@ import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
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 fa2150df..7971dfa4 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment06/MethodCallThoughputTimestampAnalysis6Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment06/MethodCallThoughputTimestampAnalysis6Test.java
@@ -19,7 +19,7 @@ import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
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 7ced7c15..77249c1d 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment07/MethodCallThoughputTimestampAnalysis7Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment07/MethodCallThoughputTimestampAnalysis7Test.java
@@ -19,7 +19,7 @@ import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
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 e2de139f..c46ae4e1 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment08/MethodCallThoughputTimestampAnalysis8Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment08/MethodCallThoughputTimestampAnalysis8Test.java
@@ -19,7 +19,7 @@ import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
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 86e662f9..61207a67 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment12/MethodCallThoughputTimestampAnalysis12Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment12/MethodCallThoughputTimestampAnalysis12Test.java
@@ -19,7 +19,7 @@ import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
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 246a968a..d0d50d5b 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment13/MethodCallThoughputTimestampAnalysis13Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment13/MethodCallThoughputTimestampAnalysis13Test.java
@@ -19,7 +19,7 @@ import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/ChwHomeComparisonMethodcallWithPorts.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/ChwHomeComparisonMethodcallWithPorts.java
new file mode 100644
index 00000000..28b2bb3f
--- /dev/null
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/ChwHomeComparisonMethodcallWithPorts.java
@@ -0,0 +1,116 @@
+package teetime.variant.methodcallWithPorts.examples;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Map;
+import java.util.Map.Entry;
+
+import util.PerformanceCheckProfile;
+import util.PerformanceResult;
+import util.PerformanceTest;
+
+public class ChwHomeComparisonMethodcallWithPorts implements PerformanceCheckProfile {
+
+	@Override
+	public String getCorrespondingPerformanceProfile() {
+		return "ChwHome";
+	}
+
+	@Override
+	public void check() {
+		Map<String, PerformanceResult> performanceResults = PerformanceTest.measurementRepository.performanceResults;
+		for (Entry<String, PerformanceResult> entry : performanceResults.entrySet()) {
+			System.out.println("---> " + entry.getKey() + "\n" + entry.getValue());
+		}
+
+		PerformanceResult test1 = performanceResults
+				.get("testWithManyObjects(teetime.variant.methodcall.examples.experiment01.MethodCallThoughputTimestampAnalysis1Test)");
+		PerformanceResult test9 = performanceResults
+				.get("testWithManyObjects(teetime.variant.methodcallWithPorts.examples.experiment09.MethodCallThoughputTimestampAnalysis9Test)");
+		PerformanceResult test10 = performanceResults
+				.get("testWithManyObjects(teetime.variant.methodcallWithPorts.examples.experiment10.MethodCallThoughputTimestampAnalysis10Test)");
+		PerformanceResult test11 = performanceResults
+				.get("testWithManyObjects(teetime.variant.methodcallWithPorts.examples.experiment11.MethodCallThoughputTimestampAnalysis11Test)");
+		PerformanceResult test14 = performanceResults
+				.get("testWithManyObjects(teetime.variant.methodcallWithPorts.examples.experiment14.MethodCallThoughputTimestampAnalysis14Test)");
+		PerformanceResult test15 = performanceResults
+				.get("testWithManyObjects(teetime.variant.methodcallWithPorts.examples.experiment15.MethodCallThoughputTimestampAnalysis15Test)");
+		PerformanceResult test16a = performanceResults
+				.get("testWithManyObjectsAnd1Thread(teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test)");
+		PerformanceResult test16b = performanceResults
+				.get("testWithManyObjectsAnd2Threads(teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test)");
+		PerformanceResult test16c = performanceResults
+				.get("testWithManyObjectsAnd4Threads(teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test)");
+		PerformanceResult test17 = performanceResults
+				.get("testWithManyObjects(teetime.variant.methodcallWithPorts.examples.experiment17.MethodCallThoughputTimestampAnalysis17Test)");
+		PerformanceResult test19a = performanceResults
+				.get("testWithManyObjectsAnd1Thread(teetime.variant.methodcallWithPorts.examples.experiment19.MethodCallThoughputTimestampAnalysis19Test)");
+		PerformanceResult test19b = performanceResults
+				.get("testWithManyObjectsAnd2Threads(teetime.variant.methodcallWithPorts.examples.experiment19.MethodCallThoughputTimestampAnalysis19Test)");
+		PerformanceResult test19c = performanceResults
+				.get("testWithManyObjectsAnd4Threads(teetime.variant.methodcallWithPorts.examples.experiment19.MethodCallThoughputTimestampAnalysis19Test)");
+
+		double value14 = (double) test14.quantiles.get(0.5) / test1.quantiles.get(0.5);
+		double value10 = (double) test10.quantiles.get(0.5) / test1.quantiles.get(0.5);
+		double value11 = (double) test11.quantiles.get(0.5) / test1.quantiles.get(0.5);
+		double value9 = (double) test9.quantiles.get(0.5) / test1.quantiles.get(0.5);
+		double value15 = (double) test15.quantiles.get(0.5) / test1.quantiles.get(0.5);
+		double value17 = (double) test17.quantiles.get(0.5) / test1.quantiles.get(0.5);
+
+		System.out.println("value14: " + value14);
+		System.out.println("value10: " + value10);
+		System.out.println("value11: " + value11);
+		System.out.println("value9: " + value9);
+		System.out.println("value15: " + value15);
+		System.out.println("value17: " + value17);
+
+		// until 25.06.2014 (incl.)
+		// assertEquals(60, (double) test14.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
+		// assertEquals(14, (double) test10.quantiles.get(0.5) / test1.quantiles.get(0.5), 2.1);
+		// assertEquals(32, (double) test11.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1);
+		// assertEquals(22, (double) test9.quantiles.get(0.5) / test1.quantiles.get(0.5), 2.1);
+		// assertEquals(44, (double) test15.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1);
+		// assertEquals(39, (double) test17.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1);
+
+		// since 26.06.2014 (incl.)
+		// assertEquals(76, value14, 5.1); // +16
+		// assertEquals(26, value10, 2.1); // +14
+		// assertEquals(44, value11, 4.1); // +12
+		// assertEquals(36, value9, 2.1); // +14
+		// assertEquals(44, value15, 4.1); // +0
+		// assertEquals(53, value17, 4.1); // +14
+
+		// // since 04.07.2014 (incl.)
+		// assertEquals(86, value14, 5.1); // +16
+		// assertEquals(26, value10, 2.1); // +0
+		// assertEquals(41, value11, 4.1); // -3
+		// assertEquals(42, value9, 2.1); // +6
+		// assertEquals(44, value15, 4.1); // +0
+		// assertEquals(53, value17, 4.1); // +0
+
+		// since 11.08.2014 (incl.)
+		assertEquals(103, value14, 5.1); // +17
+		assertEquals(47, value10, 2.1); // +21
+		assertEquals(41, value11, 4.1); // -3
+		assertEquals(42, value9, 2.1); // +6
+		assertEquals(44, value15, 4.1); // +0
+		assertEquals(53, value17, 4.1); // +0
+
+		// below results vary too much, possibly due to the OS' scheduler
+		// assertEquals(RESULT_TESTS_16, (double) test16a.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
+		// assertEquals(RESULT_TESTS_16, (double) test16b.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
+		// assertEquals(RESULT_TESTS_16, (double) test16c.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
+		//
+		// assertEquals(RESULT_TESTS_19, (double) test19a.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
+		// assertEquals(RESULT_TESTS_19, (double) test19b.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
+		// assertEquals(RESULT_TESTS_19, (double) test19c.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
+
+		// check speedup
+		assertEquals(2, (double) test16a.overallDurationInNs / test16b.overallDurationInNs, 0.3);
+		assertEquals(2.5, (double) test16a.overallDurationInNs / test16c.overallDurationInNs, 0.2);
+
+		assertEquals(2, (double) test19a.overallDurationInNs / test19b.overallDurationInNs, 0.3);
+		assertEquals(2.5, (double) test19a.overallDurationInNs / test19c.overallDurationInNs, 0.3);
+	}
+
+}
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/ChwComparisonMethodcallWithPorts.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/ChwWorkComparisonMethodcallWithPorts.java
similarity index 75%
rename from src/test/java/teetime/variant/methodcallWithPorts/examples/ChwComparisonMethodcallWithPorts.java
rename to src/test/java/teetime/variant/methodcallWithPorts/examples/ChwWorkComparisonMethodcallWithPorts.java
index b44a916d..3ef1f995 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/ChwComparisonMethodcallWithPorts.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/ChwWorkComparisonMethodcallWithPorts.java
@@ -5,42 +5,19 @@ import static org.junit.Assert.assertEquals;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.junit.AfterClass;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
-
-import teetime.variant.methodcall.examples.experiment01.MethodCallThoughputTimestampAnalysis1Test;
-import teetime.variant.methodcallWithPorts.examples.experiment09.MethodCallThoughputTimestampAnalysis9Test;
-import teetime.variant.methodcallWithPorts.examples.experiment10.MethodCallThoughputTimestampAnalysis10Test;
-import teetime.variant.methodcallWithPorts.examples.experiment11.MethodCallThoughputTimestampAnalysis11Test;
-import teetime.variant.methodcallWithPorts.examples.experiment14.MethodCallThoughputTimestampAnalysis14Test;
-import teetime.variant.methodcallWithPorts.examples.experiment15.MethodCallThoughputTimestampAnalysis15Test;
-import teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test;
-import teetime.variant.methodcallWithPorts.examples.experiment17.MethodCallThoughputTimestampAnalysis17Test;
-import teetime.variant.methodcallWithPorts.examples.experiment19.MethodCallThoughputTimestampAnalysis19Test;
-import test.PerformanceResult;
-import test.PerformanceTest;
-
-@RunWith(Suite.class)
-@SuiteClasses({
-	MethodCallThoughputTimestampAnalysis1Test.class,
-	MethodCallThoughputTimestampAnalysis9Test.class,
-	MethodCallThoughputTimestampAnalysis10Test.class,
-	MethodCallThoughputTimestampAnalysis11Test.class,
-	MethodCallThoughputTimestampAnalysis14Test.class,
-	MethodCallThoughputTimestampAnalysis15Test.class,
-	MethodCallThoughputTimestampAnalysis16Test.class,
-	MethodCallThoughputTimestampAnalysis17Test.class,
-	MethodCallThoughputTimestampAnalysis19Test.class,
-})
-public class ChwComparisonMethodcallWithPorts {
-
-	private static final double RESULT_TESTS_16 = 30;
-	private static final double RESULT_TESTS_19 = 70;
-
-	@AfterClass
-	public static void compareResults() {
+import util.PerformanceCheckProfile;
+import util.PerformanceResult;
+import util.PerformanceTest;
+
+public class ChwWorkComparisonMethodcallWithPorts implements PerformanceCheckProfile {
+
+	@Override
+	public String getCorrespondingPerformanceProfile() {
+		return "ChwWork";
+	}
+
+	@Override
+	public void check() {
 		Map<String, PerformanceResult> performanceResults = PerformanceTest.measurementRepository.performanceResults;
 		for (Entry<String, PerformanceResult> entry : performanceResults.entrySet()) {
 			System.out.println("---> " + entry.getKey() + "\n" + entry.getValue());
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/ComparisonMethodcallWithPorts.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/ComparisonMethodcallWithPorts.java
new file mode 100644
index 00000000..c2a142e7
--- /dev/null
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/ComparisonMethodcallWithPorts.java
@@ -0,0 +1,48 @@
+package teetime.variant.methodcallWithPorts.examples;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+import teetime.variant.methodcall.examples.experiment01.MethodCallThoughputTimestampAnalysis1Test;
+import teetime.variant.methodcallWithPorts.examples.experiment09.MethodCallThoughputTimestampAnalysis9Test;
+import teetime.variant.methodcallWithPorts.examples.experiment10.MethodCallThoughputTimestampAnalysis10Test;
+import teetime.variant.methodcallWithPorts.examples.experiment11.MethodCallThoughputTimestampAnalysis11Test;
+import teetime.variant.methodcallWithPorts.examples.experiment14.MethodCallThoughputTimestampAnalysis14Test;
+import teetime.variant.methodcallWithPorts.examples.experiment15.MethodCallThoughputTimestampAnalysis15Test;
+import teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test;
+import teetime.variant.methodcallWithPorts.examples.experiment17.MethodCallThoughputTimestampAnalysis17Test;
+import teetime.variant.methodcallWithPorts.examples.experiment19.MethodCallThoughputTimestampAnalysis19Test;
+import util.PerformanceCheckProfile;
+import util.PerformanceCheckProfileRepository;
+
+@RunWith(Suite.class)
+@SuiteClasses({
+	MethodCallThoughputTimestampAnalysis1Test.class,
+	MethodCallThoughputTimestampAnalysis9Test.class,
+	MethodCallThoughputTimestampAnalysis10Test.class,
+	MethodCallThoughputTimestampAnalysis11Test.class,
+	MethodCallThoughputTimestampAnalysis14Test.class,
+	MethodCallThoughputTimestampAnalysis15Test.class,
+	MethodCallThoughputTimestampAnalysis16Test.class,
+	MethodCallThoughputTimestampAnalysis17Test.class,
+	MethodCallThoughputTimestampAnalysis19Test.class,
+})
+public class ComparisonMethodcallWithPorts {
+
+	@BeforeClass
+	public static void beforeClass() {
+		PerformanceCheckProfileRepository.INSTANCE.register(ComparisonMethodcallWithPorts.class, new ChwWorkComparisonMethodcallWithPorts());
+		PerformanceCheckProfileRepository.INSTANCE.register(ComparisonMethodcallWithPorts.class, new ChwHomeComparisonMethodcallWithPorts());
+		PerformanceCheckProfileRepository.INSTANCE.register(ComparisonMethodcallWithPorts.class, new NieWorkComparisonMethodcallWithPorts());
+	};
+
+	@AfterClass
+	public static void compareResults() {
+		PerformanceCheckProfile pcp = PerformanceCheckProfileRepository.INSTANCE.get(ComparisonMethodcallWithPorts.class);
+		pcp.check();
+	}
+
+}
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/NieComparisonMethodcallWithPorts.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/NieWorkComparisonMethodcallWithPorts.java
similarity index 70%
rename from src/test/java/teetime/variant/methodcallWithPorts/examples/NieComparisonMethodcallWithPorts.java
rename to src/test/java/teetime/variant/methodcallWithPorts/examples/NieWorkComparisonMethodcallWithPorts.java
index 94028b1a..73472fee 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/NieComparisonMethodcallWithPorts.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/NieWorkComparisonMethodcallWithPorts.java
@@ -5,42 +5,19 @@ import static org.junit.Assert.assertEquals;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.junit.AfterClass;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
+import util.PerformanceCheckProfile;
+import util.PerformanceResult;
+import util.PerformanceTest;
 
-import teetime.variant.methodcall.examples.experiment01.MethodCallThoughputTimestampAnalysis1Test;
-import teetime.variant.methodcallWithPorts.examples.experiment09.MethodCallThoughputTimestampAnalysis9Test;
-import teetime.variant.methodcallWithPorts.examples.experiment10.MethodCallThoughputTimestampAnalysis10Test;
-import teetime.variant.methodcallWithPorts.examples.experiment11.MethodCallThoughputTimestampAnalysis11Test;
-import teetime.variant.methodcallWithPorts.examples.experiment14.MethodCallThoughputTimestampAnalysis14Test;
-import teetime.variant.methodcallWithPorts.examples.experiment15.MethodCallThoughputTimestampAnalysis15Test;
-import teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test;
-import teetime.variant.methodcallWithPorts.examples.experiment17.MethodCallThoughputTimestampAnalysis17Test;
-import teetime.variant.methodcallWithPorts.examples.experiment19.MethodCallThoughputTimestampAnalysis19Test;
-import test.PerformanceResult;
-import test.PerformanceTest;
+public class NieWorkComparisonMethodcallWithPorts implements PerformanceCheckProfile {
 
-@RunWith(Suite.class)
-@SuiteClasses({
-	MethodCallThoughputTimestampAnalysis1Test.class,
-	MethodCallThoughputTimestampAnalysis9Test.class,
-	MethodCallThoughputTimestampAnalysis10Test.class,
-	MethodCallThoughputTimestampAnalysis11Test.class,
-	MethodCallThoughputTimestampAnalysis14Test.class,
-	MethodCallThoughputTimestampAnalysis15Test.class,
-	MethodCallThoughputTimestampAnalysis16Test.class,
-	MethodCallThoughputTimestampAnalysis17Test.class,
-	MethodCallThoughputTimestampAnalysis19Test.class,
-})
-public class NieComparisonMethodcallWithPorts {
-
-	private static final double RESULT_TESTS_16 = 30;
-	private static final double RESULT_TESTS_19 = 70;
+	@Override
+	public String getCorrespondingPerformanceProfile() {
+		return "NieWork";
+	}
 
-	@AfterClass
-	public static void compareResults() {
+	@Override
+	public void check() {
 		Map<String, PerformanceResult> performanceResults = PerformanceTest.measurementRepository.performanceResults;
 		for (Entry<String, PerformanceResult> entry : performanceResults.entrySet()) {
 			System.out.println("---> " + entry.getKey() + "\n" + entry.getValue());
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 ba57740c..b6f0f532 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java
@@ -19,7 +19,7 @@ import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
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 0024fa18..14858bc3 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment10/MethodCallThoughputTimestampAnalysis10Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment10/MethodCallThoughputTimestampAnalysis10Test.java
@@ -19,7 +19,7 @@ import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
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 c9dc1645..1b225360 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment11/MethodCallThoughputTimestampAnalysis11Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment11/MethodCallThoughputTimestampAnalysis11Test.java
@@ -19,7 +19,7 @@ import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
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 6a49130a..e32ecf51 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment14/MethodCallThoughputTimestampAnalysis14Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment14/MethodCallThoughputTimestampAnalysis14Test.java
@@ -19,7 +19,7 @@ import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
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 d6a5f586..bf350f0c 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment15/MethodCallThoughputTimestampAnalysis15Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment15/MethodCallThoughputTimestampAnalysis15Test.java
@@ -19,7 +19,7 @@ import org.junit.Test;
 
 import teetime.util.ConstructorClosure;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment16/ChwHomePerformanceCheck.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment16/ChwHomePerformanceCheck.java
new file mode 100644
index 00000000..a924a70d
--- /dev/null
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment16/ChwHomePerformanceCheck.java
@@ -0,0 +1,33 @@
+package teetime.variant.methodcallWithPorts.examples.experiment16;
+
+import static org.junit.Assert.assertEquals;
+import util.PerformanceCheckProfile;
+import util.PerformanceResult;
+import util.PerformanceTest;
+
+public class ChwHomePerformanceCheck implements PerformanceCheckProfile {
+
+	@Override
+	public void check() {
+		PerformanceResult test16a = PerformanceTest.measurementRepository.performanceResults
+				.get("testWithManyObjectsAnd1Thread(teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test)");
+		PerformanceResult test16b = PerformanceTest.measurementRepository.performanceResults
+				.get("testWithManyObjectsAnd2Threads(teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test)");
+		PerformanceResult test16c = PerformanceTest.measurementRepository.performanceResults
+				.get("testWithManyObjectsAnd4Threads(teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test)");
+		// check speedup
+		double speedupB = (double) test16a.overallDurationInNs / test16b.overallDurationInNs;
+		double speedupC = (double) test16a.overallDurationInNs / test16c.overallDurationInNs;
+
+		System.out.println("speedupB: " + speedupB);
+		System.out.println("speedupC: " + speedupC);
+
+		assertEquals(2, speedupB, 0.3);
+		assertEquals(3, speedupC, 0.3);
+	}
+
+	@Override
+	public String getCorrespondingPerformanceProfile() {
+		return "ChwHome";
+	}
+}
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment16/ChwWorkPerformanceCheck.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment16/ChwWorkPerformanceCheck.java
new file mode 100644
index 00000000..c60b6262
--- /dev/null
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment16/ChwWorkPerformanceCheck.java
@@ -0,0 +1,33 @@
+package teetime.variant.methodcallWithPorts.examples.experiment16;
+
+import static org.junit.Assert.assertEquals;
+import util.PerformanceCheckProfile;
+import util.PerformanceResult;
+import util.PerformanceTest;
+
+public class ChwWorkPerformanceCheck implements PerformanceCheckProfile {
+
+	@Override
+	public void check() {
+		PerformanceResult test16a = PerformanceTest.measurementRepository.performanceResults
+				.get("testWithManyObjectsAnd1Thread(teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test)");
+		PerformanceResult test16b = PerformanceTest.measurementRepository.performanceResults
+				.get("testWithManyObjectsAnd2Threads(teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test)");
+		PerformanceResult test16c = PerformanceTest.measurementRepository.performanceResults
+				.get("testWithManyObjectsAnd4Threads(teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test)");
+		// check speedup
+		double speedupB = (double) test16a.overallDurationInNs / test16b.overallDurationInNs;
+		double speedupC = (double) test16a.overallDurationInNs / test16c.overallDurationInNs;
+
+		System.out.println("speedupB: " + speedupB);
+		System.out.println("speedupC: " + speedupC);
+
+		assertEquals(2, speedupB, 0.3);
+		assertEquals(2.5, speedupC, 0.3);
+	}
+
+	@Override
+	public String getCorrespondingPerformanceProfile() {
+		return "ChwWork";
+	}
+}
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 13dd2e8e..46147ec3 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment16/MethodCallThoughputTimestampAnalysis16Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment16/MethodCallThoughputTimestampAnalysis16Test.java
@@ -15,9 +15,8 @@
  ***************************************************************************/
 package teetime.variant.methodcallWithPorts.examples.experiment16;
 
-import static org.junit.Assert.assertEquals;
-
 import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
 import org.junit.runners.MethodSorters;
@@ -25,12 +24,13 @@ import org.junit.runners.MethodSorters;
 import teetime.util.ConstructorClosure;
 import teetime.util.ListUtil;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceResult;
-import test.PerformanceTest;
+import util.PerformanceCheckProfile;
+import util.PerformanceCheckProfileRepository;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
- * 
+ *
  * @since 1.10
  */
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
@@ -38,6 +38,12 @@ public class MethodCallThoughputTimestampAnalysis16Test extends PerformanceTest
 
 	// TODO use @Parameter for the number of threads
 
+	@BeforeClass
+	public static void beforeClass() {
+		PerformanceCheckProfileRepository.INSTANCE.register(MethodCallThoughputTimestampAnalysis16Test.class, new ChwWorkPerformanceCheck());
+		PerformanceCheckProfileRepository.INSTANCE.register(MethodCallThoughputTimestampAnalysis16Test.class, new ChwHomePerformanceCheck());
+	};
+
 	@Test
 	public void testWithManyObjectsAnd1Thread() {
 		this.performAnalysis(1);
@@ -55,21 +61,8 @@ public class MethodCallThoughputTimestampAnalysis16Test extends PerformanceTest
 
 	@AfterClass
 	public static void afterClass() {
-		PerformanceResult test16a = PerformanceTest.measurementRepository.performanceResults
-				.get("testWithManyObjectsAnd1Thread(teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test)");
-		PerformanceResult test16b = PerformanceTest.measurementRepository.performanceResults
-				.get("testWithManyObjectsAnd2Threads(teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test)");
-		PerformanceResult test16c = PerformanceTest.measurementRepository.performanceResults
-				.get("testWithManyObjectsAnd4Threads(teetime.variant.methodcallWithPorts.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test)");
-		// check speedup
-		double speedupB = (double) test16a.overallDurationInNs / test16b.overallDurationInNs;
-		double speedupC = (double) test16a.overallDurationInNs / test16c.overallDurationInNs;
-
-		System.out.println("speedupB: " + speedupB);
-		System.out.println("speedupC: " + speedupC);
-
-		assertEquals(2, speedupB, 0.3);
-		assertEquals(2.5, speedupC, 0.3);
+		PerformanceCheckProfile pcp = PerformanceCheckProfileRepository.INSTANCE.get(MethodCallThoughputTimestampAnalysis16Test.class);
+		pcp.check();
 	}
 
 	private void performAnalysis(final int numThreads) {
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 869f09b9..804a930d 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment17/MethodCallThoughputTimestampAnalysis17Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment17/MethodCallThoughputTimestampAnalysis17Test.java
@@ -20,7 +20,7 @@ import org.junit.Test;
 import teetime.util.ConstructorClosure;
 import teetime.util.ListUtil;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment19/MethodCallThoughputTimestampAnalysis19Test.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment19/MethodCallThoughputTimestampAnalysis19Test.java
index 25f19d8a..03951f82 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment19/MethodCallThoughputTimestampAnalysis19Test.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment19/MethodCallThoughputTimestampAnalysis19Test.java
@@ -22,7 +22,7 @@ import org.junit.runners.MethodSorters;
 import teetime.util.ConstructorClosure;
 import teetime.util.ListUtil;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceTest;
+import util.PerformanceTest;
 
 /**
  * @author Christian Wulf
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/kiekerdays/TimingsReader.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/kiekerdays/TimingsReader.java
index 232b7ff9..1b55697f 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/kiekerdays/TimingsReader.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/kiekerdays/TimingsReader.java
@@ -6,7 +6,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
-import teetime.util.StatisticsUtil;
+import util.StatisticsUtil;
 
 import com.google.common.base.Charsets;
 import com.google.common.collect.ImmutableList;
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReading/ChwHomeTcpTraceReadingTest.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReading/ChwHomeTcpTraceReadingTest.java
index d21667dc..b0b1a7b4 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReading/ChwHomeTcpTraceReadingTest.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReading/ChwHomeTcpTraceReadingTest.java
@@ -33,8 +33,8 @@ import org.junit.Test;
 import org.junit.runners.MethodSorters;
 
 import teetime.util.ListUtil;
-import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
+import util.StatisticsUtil;
 
 /**
  * @author Christian Wulf
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwHomeTcpTraceReconstructionAnalysisTest.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwHomeTcpTraceReconstructionAnalysisTest.java
index 25cbe39a..f78436fc 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwHomeTcpTraceReconstructionAnalysisTest.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwHomeTcpTraceReconstructionAnalysisTest.java
@@ -31,8 +31,8 @@ import org.junit.Before;
 import org.junit.Test;
 
 import teetime.util.ListUtil;
-import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
+import util.StatisticsUtil;
 
 /**
  * @author Christian Wulf
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwHomeTraceReconstructionAnalysisTest.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwHomeTraceReconstructionAnalysisTest.java
index 67043576..dd361ea7 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwHomeTraceReconstructionAnalysisTest.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwHomeTraceReconstructionAnalysisTest.java
@@ -30,8 +30,8 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
+import util.StatisticsUtil;
 
 import kieker.analysis.plugin.filter.flow.TraceEventRecords;
 
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwWorkTcpTraceReconstructionAnalysisTest.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwWorkTcpTraceReconstructionAnalysisTest.java
index 93882553..48658d2f 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwWorkTcpTraceReconstructionAnalysisTest.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwWorkTcpTraceReconstructionAnalysisTest.java
@@ -24,8 +24,8 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
+import util.StatisticsUtil;
 
 /**
  * @author Christian Wulf
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwWorkTraceReconstructionAnalysisTest.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwWorkTraceReconstructionAnalysisTest.java
index 5e112cd7..c123e24e 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwWorkTraceReconstructionAnalysisTest.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/ChwWorkTraceReconstructionAnalysisTest.java
@@ -30,8 +30,8 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
+import util.StatisticsUtil;
 
 import kieker.analysis.plugin.filter.flow.TraceEventRecords;
 
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/NieWorkKiekerTraceReconstructionAnalysisTest.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/NieWorkKiekerTraceReconstructionAnalysisTest.java
index d50794c3..dd4c3064 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/NieWorkKiekerTraceReconstructionAnalysisTest.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstruction/NieWorkKiekerTraceReconstructionAnalysisTest.java
@@ -30,8 +30,8 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
+import util.StatisticsUtil;
 
 import kieker.analysis.plugin.filter.flow.TraceEventRecords;
 
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstructionWithThreads/ChwHomeTcpTraceReconstructionAnalysisWithThreadsTest.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstructionWithThreads/ChwHomeTcpTraceReconstructionAnalysisWithThreadsTest.java
index 77025f22..de3ac414 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstructionWithThreads/ChwHomeTcpTraceReconstructionAnalysisWithThreadsTest.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstructionWithThreads/ChwHomeTcpTraceReconstructionAnalysisWithThreadsTest.java
@@ -33,10 +33,10 @@ import org.junit.Test;
 import org.junit.runners.MethodSorters;
 
 import teetime.util.ListUtil;
-import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.methodcallWithPorts.framework.core.Analysis;
 import teetime.variant.methodcallWithPorts.framework.core.pipe.SpScPipe;
+import util.StatisticsUtil;
 
 import kieker.common.record.IMonitoringRecord;
 
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstructionWithThreads/ChwWorkTcpTraceReconstructionAnalysisWithThreadsTest.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstructionWithThreads/ChwWorkTcpTraceReconstructionAnalysisWithThreadsTest.java
index dd066a91..800b29b2 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstructionWithThreads/ChwWorkTcpTraceReconstructionAnalysisWithThreadsTest.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReconstructionWithThreads/ChwWorkTcpTraceReconstructionAnalysisWithThreadsTest.java
@@ -28,10 +28,10 @@ import org.junit.Test;
 import org.junit.runners.MethodSorters;
 
 import teetime.util.ListUtil;
-import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.methodcallWithPorts.framework.core.Analysis;
 import teetime.variant.methodcallWithPorts.framework.core.pipe.SpScPipe;
+import util.StatisticsUtil;
 
 import kieker.common.record.IMonitoringRecord;
 
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReductionWithThreads/ChwWorkTcpTraceReductionAnalysisWithThreadsTest.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReductionWithThreads/ChwWorkTcpTraceReductionAnalysisWithThreadsTest.java
index d5bd3c9c..11aaa5b6 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReductionWithThreads/ChwWorkTcpTraceReductionAnalysisWithThreadsTest.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/traceReductionWithThreads/ChwWorkTcpTraceReductionAnalysisWithThreadsTest.java
@@ -28,8 +28,8 @@ import org.junit.Test;
 import org.junit.runners.MethodSorters;
 
 import teetime.util.ListUtil;
-import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
+import util.StatisticsUtil;
 
 /**
  * @author Christian Wulf
diff --git a/src/test/java/test/MeasurementRepository.java b/src/test/java/util/MeasurementRepository.java
similarity index 93%
rename from src/test/java/test/MeasurementRepository.java
rename to src/test/java/util/MeasurementRepository.java
index 03d1219a..c970174d 100644
--- a/src/test/java/test/MeasurementRepository.java
+++ b/src/test/java/util/MeasurementRepository.java
@@ -1,4 +1,4 @@
-package test;
+package util;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/src/test/java/util/PerformanceCheckProfile.java b/src/test/java/util/PerformanceCheckProfile.java
new file mode 100644
index 00000000..4fd71556
--- /dev/null
+++ b/src/test/java/util/PerformanceCheckProfile.java
@@ -0,0 +1,9 @@
+package util;
+
+public interface PerformanceCheckProfile {
+
+	String getCorrespondingPerformanceProfile();
+
+	void check();
+
+}
diff --git a/src/test/java/util/PerformanceCheckProfileRepository.java b/src/test/java/util/PerformanceCheckProfileRepository.java
new file mode 100644
index 00000000..d5941015
--- /dev/null
+++ b/src/test/java/util/PerformanceCheckProfileRepository.java
@@ -0,0 +1,35 @@
+package util;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class PerformanceCheckProfileRepository {
+
+	public static final PerformanceCheckProfileRepository INSTANCE = new PerformanceCheckProfileRepository();
+
+	private final Map<Class<?>, PerformanceCheckProfile> performanceCheckProfiles = new HashMap<Class<?>, PerformanceCheckProfile>();
+
+	private String currentProfile;
+
+	public PerformanceCheckProfileRepository() {
+		this.currentProfile = System.getProperty("TestProfile", "ChwWork");
+	}
+
+	public void setCurrentProfile(final String currentProfile) {
+		this.currentProfile = currentProfile;
+	}
+
+	public String getCurrentProfile() {
+		return this.currentProfile;
+	}
+
+	public void register(final Class<?> testClass, final PerformanceCheckProfile profile) {
+		if (profile.getCorrespondingPerformanceProfile().equals(this.currentProfile)) {
+			this.performanceCheckProfiles.put(testClass, profile);
+		}
+	}
+
+	public PerformanceCheckProfile get(final Class<?> clazz) {
+		return this.performanceCheckProfiles.get(clazz);
+	}
+}
diff --git a/src/test/java/test/PerformanceResult.java b/src/test/java/util/PerformanceResult.java
similarity index 94%
rename from src/test/java/test/PerformanceResult.java
rename to src/test/java/util/PerformanceResult.java
index e950ea40..36c82832 100644
--- a/src/test/java/test/PerformanceResult.java
+++ b/src/test/java/util/PerformanceResult.java
@@ -1,9 +1,7 @@
-package test;
+package util;
 
 import java.util.Map;
 
-import teetime.util.StatisticsUtil;
-
 public class PerformanceResult {
 
 	public long overallDurationInNs;
diff --git a/src/test/java/test/PerformanceTest.java b/src/test/java/util/PerformanceTest.java
similarity index 97%
rename from src/test/java/test/PerformanceTest.java
rename to src/test/java/util/PerformanceTest.java
index 5d74b846..b85aacc4 100644
--- a/src/test/java/test/PerformanceTest.java
+++ b/src/test/java/util/PerformanceTest.java
@@ -1,4 +1,4 @@
-package test;
+package util;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -11,7 +11,6 @@ import org.junit.rules.TestRule;
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
-import teetime.util.StatisticsUtil;
 import teetime.util.StopWatch;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
 
diff --git a/src/main/java/teetime/util/StatisticsUtil.java b/src/test/java/util/StatisticsUtil.java
similarity index 98%
rename from src/main/java/teetime/util/StatisticsUtil.java
rename to src/test/java/util/StatisticsUtil.java
index a5120bba..18915461 100644
--- a/src/main/java/teetime/util/StatisticsUtil.java
+++ b/src/test/java/util/StatisticsUtil.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  ***************************************************************************/
-package teetime.util;
+package util;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -24,8 +24,8 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.concurrent.TimeUnit;
 
+import teetime.util.MathUtil;
 import teetime.variant.explicitScheduling.examples.throughput.TimestampObject;
-import test.PerformanceResult;
 
 /**
  * @author Christian Wulf
-- 
GitLab