binary-trees Pharo Smalltalk program
source code
"* The Computer Language Benchmarks Game
https://salsa.debian.org/benchmarksgame-team/benchmarksgame/
contributed by Isaac Gouy
modified by Eliot Miranda
*"!
Object subclass: #BenchmarksGame
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'benchmarks game'!
Object subclass: #TreeNode
instanceVariableNames: 'left right'
classVariableNames: ''
poolDictionaries: ''
category: 'benchmarks game'!
!BenchmarksGame class methodsFor: 'initialize-release'!
do: n
| minDepth maxDepth stretchDepth check longLivedTree iterations |
minDepth := 4.
maxDepth := minDepth + 2 max: n.
stretchDepth := maxDepth + 1.
check := (TreeNode bottomUpTree: stretchDepth) itemCheck.
Stdio stdout
nextPutAll: 'stretch tree of depth '; print: stretchDepth; tab;
nextPutAll: ' check: '; print: check; nl.
longLivedTree := TreeNode bottomUpTree: maxDepth.
minDepth to: maxDepth by: 2 do: [:depth|
iterations := 1 bitShift: maxDepth - depth + minDepth.
check := 0.
1 to: iterations do: [:i|
check := check + (TreeNode bottomUpTree: depth) itemCheck
].
Stdio stdout
print: iterations; tab;
nextPutAll: ' trees of depth '; print: depth; tab;
nextPutAll: ' check: '; print: check; nl
].
Stdio stdout
nextPutAll: 'long lived tree of depth '; print: maxDepth; tab;
nextPutAll: ' check: '; print: longLivedTree itemCheck; nl! !
!TreeNode class methodsFor: 'instance creation'!
bottomUpTree: anInteger
^(anInteger > 0)
ifTrue: [
self
left: (self bottomUpTree: anInteger - 1)
right: (self bottomUpTree: anInteger - 1)
]
ifFalse: [self left: nil right: nil]!
left: leftChild right: rightChild
^(super new) left: leftChild right: rightChild! !
!TreeNode methodsFor: 'accessing'!
itemCheck
^left isNil
ifTrue: [1] ifFalse: [1 + left itemCheck + right itemCheck]! !
!TreeNode methodsFor: 'initialize-release'!
left: leftChild right: rightChild
left := leftChild.
right := rightChild! !
!StdioStream methodsFor: 'benchmarks game'!
tab
self nextPut: Character tab!
nl
self nextPut: Character lf! !
notes, command-line, and program output
NOTES:
64-bit Ubuntu quad core
Pharo 12.0.0
Pharo-12.0.0+SNAPSHOT.build.1507.sha.
a4f8da8972214b9c9c39c33e826394a109911041 (64 Bit)
Compiler: 5.4.0 20160609
Wed, 29 May 2024 01:42:52 GMT
MAKE:
cp /opt/src/pharo-vm-Linux-x86_64-stable/Pharo12.0-SNAPSHOT-64bit-a4f8da8.image binarytrees.pharo_run.image
cp /opt/src/pharo-vm-Linux-x86_64-stable/Pharo12.0-SNAPSHOT-64bit-a4f8da8.changes binarytrees.pharo_run.changes
ln -s /opt/src/pharo-vm-Linux-x86_64-stable/Pharo12.0-64bit-a4f8da8.sources .
cat Include/pharo/make.st
| prog |
(SystemWindow windowsIn: World
satisfying: [:w | w model canDiscardEdits])
do: [:w | w delete].
"load program to be measured"
prog := Smalltalk getSystemAttribute: 3.
(prog notNil) ifTrue: [prog asFileReference fileIn].
ImageCleaner cleanUpForRelease.
Smalltalk garbageCollect.
SmalltalkImage current snapshot: true andQuit: true.
/opt/src/pharo-vm-Linux-x86_64-stable/pharo --headless binarytrees.pharo_run.image Include/pharo/make.st binarytrees.pharo
cat Include/pharo/main.st
BenchmarksGame do: (Smalltalk getSystemAttribute: 3) asInteger.!
SmalltalkImage current snapshot: false andQuit: true!
28.29s to complete and log all make actions
COMMAND LINE:
/opt/src/pharo-vm-Linux-x86_64-stable/pharo --headless binarytrees.pharo_run.image Include/pharo/main.st 21
PROGRAM OUTPUT:
stretch tree of depth 22 check: 8388607
2097152 trees of depth 4 check: 65011712
524288 trees of depth 6 check: 66584576
131072 trees of depth 8 check: 66977792
32768 trees of depth 10 check: 67076096
8192 trees of depth 12 check: 67100672
2048 trees of depth 14 check: 67106816
512 trees of depth 16 check: 67108352
128 trees of depth 18 check: 67108736
32 trees of depth 20 check: 67108832
long lived tree of depth 21 check: 4194303