diff --git a/test/benchmark/binary_trees_gc.wren b/test/benchmark/binary_trees_gc.wren new file mode 100644 index 00000000..46489897 --- /dev/null +++ b/test/benchmark/binary_trees_gc.wren @@ -0,0 +1,60 @@ +// 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) +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).toString + " trees of depth " + + depth.toString + " check: " + check.toString) + System.gc() + + iterations = iterations / 4 + depth = depth + 2 +} + +System.print("long lived tree of depth " + maxDepth.toString + " check: " + + longLivedTree.check.toString) +System.gc() + +System.print("elapsed: " + (System.clock - start).toString) diff --git a/util/benchmark.py b/util/benchmark.py index f7116d29..2c8ad693 100755 --- a/util/benchmark.py +++ b/util/benchmark.py @@ -59,6 +59,14 @@ BENCHMARK("binary_trees", """stretch tree of depth 13 check: -1 32 trees of depth 12 check: -32 long lived tree of depth 12 check: -1""") +BENCHMARK("binary_trees_gc", """stretch tree of depth 13 check: -1 +8192 trees of depth 4 check: -8192 +2048 trees of depth 6 check: -2048 +512 trees of depth 8 check: -512 +128 trees of depth 10 check: -128 +32 trees of depth 12 check: -32 +long lived tree of depth 12 check: -1""") + BENCHMARK("delta_blue", "14065400") BENCHMARK("fib", r"""317811