| 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'! !
 |