s/BenchmarkExecutor.st
changeset 206 29602f0696d8
parent 186 d444d8e7d29b
child 207 1697e4572960
--- a/s/BenchmarkExecutor.st	Sat Mar 08 16:29:50 2014 +0000
+++ b/s/BenchmarkExecutor.st	Mon Mar 10 11:29:09 2014 +0000
@@ -27,8 +27,40 @@
 "
 ! !
 
+!BenchmarkExecutor class methodsFor:'execution'!
+
+execute:aBenchmarkInstance
+    ^ self new execute:aBenchmarkInstance
+!
+
+execute:aBenchmarkInstance result:aBenchmarkResult
+    ^ self new execute:aBenchmarkInstance result:aBenchmarkResult
+!
+
+execute:aBenchmarkInstance result:aBenchmarkResult defines:aDictionary
+    ^ self new execute:aBenchmarkInstance result:aBenchmarkResult defines:aDictionary
+! !
+
 !BenchmarkExecutor methodsFor:'executing'!
 
+execute: aBenchmarkInstance
+    "Executes the benchmark and returns the result (timings)"
+
+    ^ self execute: aBenchmarkInstance result: BenchmarkResult new
+
+    "Created: / 09-03-2014 / 10:59:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+execute: aBenchmarkInstance result: aBenchmarkResult
+    "
+    Executes the benchmark and adds results into given resultset
+    "
+
+    ^ self execute: aBenchmarkInstance result: aBenchmarkResult defines: Dictionary new.
+
+    "Created: / 09-03-2014 / 10:59:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 execute: aBenchmarkInstance result: aBenchmarkResult defines: aDictionary
     "
     Takes a benchmark instance and a set of parameter defines,
@@ -73,9 +105,13 @@
 
         ] ifFalse:[
             parameter default == BenchmarkParameter undefinedValue ifTrue:[
-                BenchmarkParameterError new signal: 'Parameter value for ' , parameter name , ' not specified and parameter has no default value'.
+                values := parameter values.
+                values isNil ifTrue:[ 
+                    BenchmarkParameterError new signal: 'Parameter value not defined and default value(s) not specified for' , parameter name.
+                ].
+            ] ifFalse:[ 
+                values := Array with: parameter default.    
             ].
-            values := Array with: parameter default.    
         ].
         parameter -> values
     ].
@@ -98,6 +134,7 @@
     combinator value: #().
 
     "Created: / 12-08-2013 / 00:11:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-03-2014 / 10:23:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !BenchmarkExecutor methodsFor:'executing-private'!
@@ -112,22 +149,33 @@
 
     | times outcome |
 
-    [
-        self setUp:aBenchmarkInstance parameters: aCollection .
+    "First, warm it up"
+    [ 
+        self setUp:aBenchmarkInstance parameters: aCollection.  
         self warmUp: aBenchmarkInstance.
-        times := (1 to: aBenchmarkResult runs) collect:[:i | self timeIt: aBenchmarkInstance ].
-        aBenchmarkResult addOutcome:
-            (outcome := BenchmarkOutcome 
-                benchmark: aBenchmarkInstance
-                times: times
-                parameters: aCollection)
     ] ensure:[
         self tearDown: aBenchmarkInstance
     ].
+
+    times := (1 to: aBenchmarkResult runs) collect:[:i | 
+        [
+            self setUp:aBenchmarkInstance parameters: aCollection.  
+            self timeIt: aBenchmarkInstance 
+        ] ensure:[
+            self tearDown: aBenchmarkInstance
+        ].
+    ].
+
+    aBenchmarkResult addOutcome:
+        (outcome := BenchmarkOutcome 
+            benchmark: aBenchmarkInstance
+            times: times
+            parameters: aCollection).
+
     ^ outcome
 
     "Created: / 27-07-2013 / 12:32:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 21-08-2013 / 13:34:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 10-03-2014 / 09:36:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 setUp:aBenchmarkInstance parameters: aCollection