| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | 
							- Smalltalk current createPackage: 'Benchfib'!
 
- Object subclass: #Benchfib
 
- 	instanceVariableNames: ''
 
- 	package: 'Benchfib'!
 
- !Benchfib class methodsFor: 'not yet classified'!
 
- main
 
- 	| result |
 
- 	result := 0 tinyBenchmarks.
 
- 	console log: '0 tinyBenchmarks => ' , result
 
- ! !
 
- !Number methodsFor: '*Benchfib'!
 
- benchFib 
 
- 	"Handy send-heavy benchmark"
 
- 	"(result // seconds to run) = approx calls per second"
 
- 	" | r t |
 
- 	  t := Time millisecondsToRun: [r := 26 benchFib].
 
- 	  (r * 1000) // t"
 
- 	"138000 on a Mac 8100/100"
 
- 	^ self < 2 
 
- 		ifTrue: [1] 
 
- 		ifFalse: [(self-1) benchFib + (self-2) benchFib + 1]
 
- !
 
- benchmark 
 
- 	"Handy bytecode-heavy benchmark"
 
- 	"(500000 // time to run) = approx bytecodes per second"
 
- 	"5000000 // (Time millisecondsToRun: [10 benchmark]) * 1000"
 
- 	"3059000 on a Mac 8100/100"
 
-     | size flags prime k count |
 
-     size := 8190.
 
-     1 to: self do:
 
-         [:iter |
 
-         count := 0.
 
-         flags := Array new.
 
-         size timesRepeat: [ flags add: true].
 
-         1 to: size do:
 
-             [:i | (flags at: i) ifTrue:
 
-                 [prime := i+1.
 
-                 k := i + prime.
 
-                 [k <= size] whileTrue:
 
-                     [flags at: k put: false.
 
-                     k := k + prime].
 
-                 count := count + 1]]].
 
-     ^ count
 
- !
 
- jsbenchFib
 
-  
 
- 	<if (this < 2) {
 
- return 1;
 
- } else {
 
- return (this-1)._jsbenchFib() + (this-2)._jsbenchFib() + 1;}>
 
- !
 
- jsbenchmark
 
- <
 
- var size = 8190;
 
- var count;
 
- for (var z=0;z<this;z++) {
 
-   count = 0;
 
-   var flags = new Array();
 
-   for (var p=0; p<size; p++) {
 
-     flags[p] = true;
 
-   }
 
-   for (var i=1;i<=size;i++) {
 
-     if (flags[i-1]) {
 
-       var prime = i+1;
 
-       var k = i + prime;
 
-       while (k <= size) {
 
-         flags[k-1] = false;
 
-         k = k + prime;
 
-       }
 
-       count = count + 1;
 
-     }
 
-   }
 
- }
 
- return count>
 
- !
 
- jstinyBenchmarks
 
- 	"0 jstinyBenchmarks"
 
- 	| t1 t2 r n1 n2 |
 
- 	n1 := 1.
 
- 	[t1 := Date millisecondsToRun: [n1 jsbenchmark].
 
- 	t1 < 1000] whileTrue:[n1 := n1 * 2]. "Note: #benchmark's runtime is about O(n)"
 
- 	n2 := 28.
 
- 	[t2 := Date millisecondsToRun: [r := n2 jsbenchFib].
 
- 	t2 < 1000] whileTrue:[n2 := n2 + 1]. 
 
- 	"Note: #jsbenchFib's runtime is about O(k^n),
 
- 		where k is the golden number = (1 + 5 sqrt) / 2 = 1.618...."
 
- 	^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ',
 
- 	  ((r * 1000) / t2) printString, ' sends/sec'
 
- !
 
- tinyBenchmarks 
 
- 	"Report the results of running the two tiny Squeak benchmarks.
 
- 	ar 9/10/1999: Adjusted to run at least 1 sec to get more stable results"
 
- 	"0 tinyBenchmarks"
 
- 	"On a 292 MHz G3 Mac: 22727272 bytecodes/sec; 984169 sends/sec"
 
- 	"On a 400 MHz PII/Win98:  18028169 bytecodes/sec; 1081272 sends/sec"
 
- 	| t1 t2 r n1 n2 |
 
- 	n1 := 1.
 
- 	[t1 := Date millisecondsToRun: [n1 benchmark].
 
- 	t1 < 1000] whileTrue:[n1 := n1 * 2]. "Note: #benchmark's runtime is about O(n)"
 
- 	n2 := 16.
 
- 	[t2 := Date millisecondsToRun: [r := n2 benchFib].
 
- 	t2 < 1000] whileTrue:[n2 := n2 + 1]. 
 
- 	"Note: #benchFib's runtime is about O(k^n),
 
- 		where k is the golden number = (1 + 5 sqrt) / 2 = 1.618...."
 
- 	^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ',
 
- 	  ((r * 1000) / t2) printString, ' sends/sec'
 
- ! !
 
 
  |