--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/micro/BenchmarkPerform.st Sat Jul 20 12:25:48 2013 +0100
@@ -0,0 +1,509 @@
+"{ Package: 'jv:calipel/s/benchmarks/micro' }"
+
+Object subclass:#BenchmarkPerform
+ instanceVariableNames:'receivers selectors iterations nreceivers nselectors nargs'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'CalipeL-S-Benchmarks-Micro'
+!
+
+!BenchmarkPerform class methodsFor:'documentation'!
+
+documentation
+"
+ Replace 'Object', 'NewClass1' and
+ the empty string arguments by true values.
+
+ Install (or change) the class by 'accepting',
+ either via the menu or the keyboard (usually CMD-A).
+
+ You can also change the category simply by editing
+ the categoryString and accepting.
+
+ To be nice to others (and yourself later), do not forget to
+ add some documentation; preferably under the classes documentation
+ protocol.
+ (see the `create documentation stubs' item in the methodList menu;
+ switch from instance to class to find this menu item.)
+
+ Notice, that ST/X uses the convention to document the class using
+ comment-only class methods (however, ST80 comments are supported and
+ can be changed via the class-documentation menu).
+
+"
+! !
+
+!BenchmarkPerform methodsFor:'benchmarks'!
+
+benchmark0
+ <benchmark>
+
+ | sels r ri s si ripsi|
+
+ ri := 1.
+ si := 1.
+ sels := selectors at: 1+0.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s
+ ]
+
+ "Created: / 20-07-2013 / 11:13:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark1
+ <benchmark>
+
+ | sels r ri s si ripsi|
+
+ ri := 1.
+ si := 1.
+ sels := selectors at: 1+1.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s with: 1
+ ]
+
+ "Created: / 20-07-2013 / 11:14:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark2
+ <benchmark>
+
+ | sels r ri s si ripsi|
+
+ ri := 1.
+ si := 1.
+ sels := selectors at: 1+2.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s with: 1 with: 2.
+ ]
+
+ "Created: / 20-07-2013 / 11:14:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark3
+ <benchmark>
+
+ | sels r ri s si ripsi|
+
+ ri := 1.
+ si := 1.
+ sels := selectors at: 1+3.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s with: 1 with: 2 with: 3
+ ]
+
+ "Created: / 20-07-2013 / 11:15:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark4
+ <benchmark>
+
+ | sels r ri s si ripsi|
+
+ ri := 1.
+ si := 1.
+ sels := selectors at: 1+4.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s with: 1 with: 2 with: 3 with: 4
+ ]
+
+ "Created: / 20-07-2013 / 11:15:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark5
+ <benchmark>
+
+ | sels r ri s si ripsi|
+
+ ri := 1.
+ si := 1.
+ sels := selectors at: 1+5.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s with: 1 with: 2 with: 3 with: 4 with:5
+ ]
+
+ "Created: / 20-07-2013 / 11:16:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark6
+ <benchmark>
+
+ | sels r ri s si ripsi|
+
+ ri := 1.
+ si := 1.
+ sels := selectors at: 1+6.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s with: 1 with: 2 with: 3 with: 4 with:5 with:6
+ ]
+
+ "Created: / 20-07-2013 / 11:16:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark7
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 7.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:17:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark8
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 8.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:17:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark9
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 9.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:17:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkA
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 10.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:17:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkB
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 11.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:17:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkC
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 12.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:18:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkD
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 13.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:18:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkE
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 14.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:18:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkF
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 15.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:18:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkPerform methodsFor:'parameters'!
+
+iterations
+ ^ iterations
+!
+
+iterations:anInteger
+ <parameter: 'How many interations in outer loop' type: #Integer default: 1000>
+ iterations := anInteger.
+
+ "Modified: / 20-07-2013 / 01:16:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+nreceivers
+ ^ nreceivers
+!
+
+nreceivers:anInteger
+ <parameter: 'Number of different receivers to send messages to' type: #Integer>
+ nreceivers := anInteger.
+
+ "Modified: / 20-07-2013 / 01:06:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+nselectors
+ ^ nselectors
+!
+
+nselectors:anInteger
+ <parameter: 'Number of different messages to send' type: #Integer>
+ nselectors := anInteger.
+
+ "Modified: / 20-07-2013 / 01:07:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkPerform methodsFor:'running'!
+
+setUp
+ <setup>
+
+ | random |
+
+ nreceivers isNil ifTrue:[
+ BenchmarkParameterError new signal:'No value set for parameter ''nreceivers''!!'.
+ ].
+ nselectors isNil ifTrue:[
+ BenchmarkParameterError new signal:'No value set for parameter ''nselectors''!!'.
+ ].
+
+ receivers := Smalltalk allClasses asArray copyFrom: 1 to: nreceivers.
+
+ random := Random new seed: 173.
+ selectors := Array new: 16.
+ 1 to: 16 do:[:na|
+ | bucket |
+
+ bucket := (1 to: nselectors) collect:[:i|
+ | no suffixSel suffixMethod |
+ suffixSel := #(
+ "00" ''
+ "01" ':'
+ "02" ':a:'
+ "03" ':a:a:'
+ "04" ':a:a:a:'
+ "05" ':a:a:a:a:'
+ "06" ':a:a:a:a:a:'
+ "07" ':a:a:a:a:a:a:'
+ "08" ':a:a:a:a:a:a:a:'
+ "09" ':a:a:a:a:a:a:a:a:'
+ "10" ':a:a:a:a:a:a:a:a:a:'
+ "11" ':a:a:a:a:a:a:a:a:a:a:'
+ "12" ':a:a:a:a:a:a:a:a:a:a:a:'
+ "13" ':a:a:a:a:a:a:a:a:a:a:a:a:'
+ "14" ':a:a:a:a:a:a:a:a:a:a:a:a:a:'
+ "15" ':a:a:a:a:a:a:a:a:a:a:a:a:a:a:'
+ ) at: na.
+ suffixMethod := #(
+ "00" ''
+ "01" ':a1'
+ "02" ':a1 a:a2'
+ "03" ':a1 a:a2 a:a3'
+ "04" ':a1 a:a2 a:a3 a:a4'
+ "05" ':a1 a:a2 a:a3 a:a4 a:a5'
+ "06" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6'
+ "07" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7'
+ "08" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8'
+ "09" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8 a:a9'
+ "10" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8 a:a9 a:aA'
+ "11" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8 a:a9 a:aA a:aB'
+ "12" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8 a:a9 a:aA a:aB a:aC'
+ "13" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8 a:a9 a:aA a:aB a:aC a:aD'
+ "14" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8 a:a9 a:aA a:aB a:aC a:aD a:aE'
+ "15" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8 a:a9 a:aA a:aB a:aC a:aD a:aE a:aF'
+ ) at: na.
+ no := random nextInteger printString.
+ Object compile: 'm' , no , suffixMethod , '
+ ^ 123456' classified: 'benchmark-mocks'.
+ ('m', no , suffixSel) asSymbol.
+ ].
+ selectors at: na put: bucket.
+ ]
+
+ "Created: / 20-07-2013 / 00:55:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 20-07-2013 / 02:35:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+tearDown
+ <teardown>
+
+ selectors do:[:bucket|
+ bucket do:[:selector|
+ Object removeSelector: selector
+ ]
+ ]
+
+ "Created: / 20-07-2013 / 02:11:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+