From 6e647593f7a9999d5ec75ee692953efd7027ad0c Mon Sep 17 00:00:00 2001
From: Christian Wulf <chw@informatik.uni-kiel.de>
Date: Wed, 30 Jul 2014 06:09:09 +0200
Subject: [PATCH] refactored: StatisticsUtil does not print to sysout anymore

---
 src/main/java/teetime/util/StatisticsUtil.java      | 13 +------------
 .../throughput/ThroughputTimestampAnalysisTest.java |  2 +-
 .../throughput/ThroughputTimestampAnalysisTest.java |  2 +-
 .../MethodCallThoughputTimestampAnalysis1Test.java  |  9 +++++++--
 src/test/java/test/PerformanceTest.java             | 12 ++++++++++--
 5 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/src/main/java/teetime/util/StatisticsUtil.java b/src/main/java/teetime/util/StatisticsUtil.java
index 69655706..c27035ae 100644
--- a/src/main/java/teetime/util/StatisticsUtil.java
+++ b/src/main/java/teetime/util/StatisticsUtil.java
@@ -40,11 +40,10 @@ public class StatisticsUtil {
 		// utility class
 	}
 
-	public static PerformanceResult printStatistics(final long overallDurationInNs, final List<TimestampObject> timestampObjects) {
+	public static PerformanceResult computeStatistics(final long overallDurationInNs, final List<TimestampObject> timestampObjects) {
 		PerformanceResult performanceResult = new PerformanceResult();
 
 		performanceResult.overallDurationInNs = overallDurationInNs;
-		System.out.println("Duration: " + TimeUnit.NANOSECONDS.toMillis(overallDurationInNs) + " ms");
 
 		final List<Long> sortedDurationsInNs = new ArrayList<Long>(timestampObjects.size() / 2);
 		long sumInNs = 0;
@@ -59,24 +58,14 @@ public class StatisticsUtil {
 		performanceResult.sumInNs = sumInNs;
 
 		final Map<Double, Long> quintileValues = StatisticsUtil.calculateQuintiles(sortedDurationsInNs);
-
 		performanceResult.quantiles = quintileValues;
 
 		final long avgDurInNs = sumInNs / (timestampObjects.size() / 2);
-		System.out.println("avg duration: " + TimeUnit.NANOSECONDS.toMicros(avgDurInNs) + " µs");
-
 		performanceResult.avgDurInNs = avgDurInNs;
 
-		System.out.println(getQuantilesString(quintileValues));
-
 		final long confidenceWidthInNs = StatisticsUtil.calculateConfidenceWidth(sortedDurationsInNs, avgDurInNs);
-
 		performanceResult.confidenceWidthInNs = confidenceWidthInNs;
 
-		System.out.println("confidenceWidth: " + confidenceWidthInNs + " ns");
-		System.out.println("[" + TimeUnit.NANOSECONDS.toMicros(avgDurInNs - confidenceWidthInNs) + " µs, "
-				+ TimeUnit.NANOSECONDS.toMicros(avgDurInNs + confidenceWidthInNs) + " µs]");
-
 		return performanceResult;
 	}
 
diff --git a/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java b/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java
index e64266ed..e4177ad8 100644
--- a/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java
+++ b/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java
@@ -61,7 +61,7 @@ public class ThroughputTimestampAnalysisTest extends PerformanceTest {
 			stopWatch.end();
 		}
 
-		StatisticsUtil.printStatistics(stopWatch.getDurationInNs(), timestampObjects);
+		StatisticsUtil.computeStatistics(stopWatch.getDurationInNs(), timestampObjects);
 	}
 
 }
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 998a447a..df305466 100644
--- a/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputTimestampAnalysisTest.java
+++ b/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputTimestampAnalysisTest.java
@@ -58,7 +58,7 @@ public class ThroughputTimestampAnalysisTest extends PerformanceTest {
 			stopWatch.end();
 		}
 
-		StatisticsUtil.printStatistics(stopWatch.getDurationInNs(), timestampObjects);
+		StatisticsUtil.computeStatistics(stopWatch.getDurationInNs(), timestampObjects);
 	}
 
 }
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 940e090b..8c6362ba 100644
--- a/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThoughputTimestampAnalysis1Test.java
+++ b/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThoughputTimestampAnalysis1Test.java
@@ -15,10 +15,14 @@
  ***************************************************************************/
 package teetime.variant.methodcall.examples.experiment01;
 
+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;
 
 /**
@@ -28,8 +32,7 @@ import test.PerformanceTest;
  */
 public class MethodCallThoughputTimestampAnalysis1Test extends PerformanceTest {
 
-	// 500 times faster than our new framework
-	// TODO check why
+	// TODO check why the optimal, but inflexible impl is 500 times faster than our new framework
 
 	@Test
 	public void testWithManyObjects() {
@@ -54,6 +57,8 @@ public class MethodCallThoughputTimestampAnalysis1Test extends PerformanceTest {
 			this.stopWatch.end();
 		}
 
+		PerformanceResult performanceResult = StatisticsUtil.computeStatistics(this.stopWatch.getDurationInNs(), this.timestampObjects);
+		assertEquals(292, performanceResult.quantiles.get(0.5), 1); // chw home
 	}
 
 }
diff --git a/src/test/java/test/PerformanceTest.java b/src/test/java/test/PerformanceTest.java
index d3982b48..5d74b846 100644
--- a/src/test/java/test/PerformanceTest.java
+++ b/src/test/java/test/PerformanceTest.java
@@ -2,6 +2,7 @@ package test;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 import org.junit.After;
 import org.junit.Before;
@@ -23,7 +24,7 @@ public abstract class PerformanceTest {
 
 	public static final MeasurementRepository measurementRepository = new MeasurementRepository();
 
-	private Description description;
+	protected Description description;
 
 	protected StopWatch stopWatch;
 	protected List<TimestampObject> timestampObjects;
@@ -46,7 +47,14 @@ public abstract class PerformanceTest {
 
 	@After
 	public void after() {
-		PerformanceResult performanceResult = StatisticsUtil.printStatistics(this.stopWatch.getDurationInNs(), this.timestampObjects);
+		PerformanceResult performanceResult = StatisticsUtil.computeStatistics(this.stopWatch.getDurationInNs(), this.timestampObjects);
 		measurementRepository.performanceResults.put(this.description.getDisplayName(), performanceResult);
+
+		System.out.println("Duration: " + TimeUnit.NANOSECONDS.toMillis(performanceResult.overallDurationInNs) + " ms");
+		System.out.println("avg duration: " + TimeUnit.NANOSECONDS.toMicros(performanceResult.avgDurInNs) + " µs");
+		System.out.println(StatisticsUtil.getQuantilesString(performanceResult.quantiles));
+		System.out.println("confidenceWidth: " + performanceResult.confidenceWidthInNs + " ns");
+		System.out.println("[" + TimeUnit.NANOSECONDS.toMicros(performanceResult.avgDurInNs - performanceResult.confidenceWidthInNs) + " µs, "
+				+ TimeUnit.NANOSECONDS.toMicros(performanceResult.avgDurInNs + performanceResult.confidenceWidthInNs) + " µs]");
 	}
 }
-- 
GitLab