1
0
forked from Mirror/wren
Files
wren/test/benchmark/binary_trees_gc.wren
Bob Nystrom 78655c68b0 Simple string interpolation.
This allows "%(...)" inside a string literal to interpolate the
stringified result of an expression.

It doesn't support custom interpolators or format strings, but we can
consider extending that later.
2015-11-11 07:55:48 -08:00

60 lines
1.2 KiB
Plaintext

// Ported from the Python version.
class Tree {
construct new(item, depth) {
_item = item
if (depth > 0) {
var item2 = item + item
depth = depth - 1
_left = Tree.new(item2 - 1, depth)
_right = Tree.new(item2, depth)
}
}
check {
if (_left == null) {
return _item
}
return _item + _left.check - _right.check
}
}
var minDepth = 4
var maxDepth = 12
var stretchDepth = maxDepth + 1
var start = System.clock
System.print("stretch tree of depth %(stretchDepth) check: " +
"%(Tree.new(0, stretchDepth).check)")
for (i in 1...1000) System.gc()
var longLivedTree = Tree.new(0, maxDepth)
// iterations = 2 ** maxDepth
var iterations = 1
for (d in 0...maxDepth) {
iterations = iterations * 2
}
var depth = minDepth
while (depth < stretchDepth) {
var check = 0
for (i in 1..iterations) {
check = check + Tree.new(i, depth).check + Tree.new(-i, depth).check
}
System.print("%(iterations * 2) trees of depth %(depth) check: %(check)")
for (i in 1...1000) System.gc()
iterations = iterations / 4
depth = depth + 2
}
System.print(
"long lived tree of depth %(maxDepth) check: %(longLivedTree.check)")
for (i in 1...1000) System.gc()
System.print("elapsed: %(System.clock - start)")