1
0
forked from Mirror/wren
Files
wren/test/benchmark/binary_trees.wren
Bob Nystrom 58e4d26648 "IO" -> "System".
Get rid of the separate opt-in IO class and replace it with a core
System class.

- Remove wren_io.c, wren_io.h, and io.wren.
- Remove the flags that disable it.
- Remove the overloads for print() with different arity. (It was an
  experiment, but I don't think it's that useful.)
- Remove IO.read(). That will reappear using libuv in the CLI at some
  point.
- Remove IO.time. Doesn't seem to have been used.
- Update all of the tests, docs, etc.

I'm sorry for all the breakage this causes, but I think "System" is a
better name for this class (it makes it natural to add things like
"System.gc()") and frees up "IO" for referring to the CLI's IO module.
2015-09-15 07:46:09 -07:00

56 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.toString + " check: " +
Tree.new(0, stretchDepth).check.toString)
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).toString + " trees of depth " +
depth.toString + " check: " + check.toString)
iterations = iterations / 4
depth = depth + 2
}
System.print("long lived tree of depth " + maxDepth.toString + " check: " +
longLivedTree.check.toString)
System.print("elapsed: " + (System.clock - start).toString)