diff options
| author | Brian Anderson <[email protected]> | 2011-03-13 18:43:39 -0400 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2011-03-14 15:52:48 -0700 |
| commit | 467b9f3908dc74976807ddad4138f3d496433234 (patch) | |
| tree | 7b27f371d90c37a1c28133c53bd91db248ffca5e /src/test | |
| parent | Add _int.pow (diff) | |
| download | rust-467b9f3908dc74976807ddad4138f3d496433234.tar.xz rust-467b9f3908dc74976807ddad4138f3d496433234.zip | |
Implement the rest of the binary trees shootout benchmark
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/bench/shootout/binary-trees.rs | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/test/bench/shootout/binary-trees.rs b/src/test/bench/shootout/binary-trees.rs index 5f879434..92bedb8b 100644 --- a/src/test/bench/shootout/binary-trees.rs +++ b/src/test/bench/shootout/binary-trees.rs @@ -1,3 +1,7 @@ +use std; + +import std._int; + tag tree { nil; node(@tree, @tree, int); @@ -14,5 +18,57 @@ fn item_check(@tree t) -> int { } } +fn bottom_up_tree(int item, int depth) -> @tree{ + if (depth > 0) { + ret @node(bottom_up_tree(2 * item - 1, depth - 1), + bottom_up_tree(2 * item, depth - 1), + item); + } else { + ret @nil; + } +} + fn main() { + + auto n = 8; + auto min_depth = 4; + auto max_depth; + if (min_depth + 2 > n) { + max_depth = min_depth + 2; + } else { + max_depth = n; + } + + auto stretch_depth = max_depth + 1; + + auto stretch_tree = bottom_up_tree(0, stretch_depth); + log #fmt("stretch tree of depth %d\t check: %d", + stretch_depth, item_check(stretch_tree)); + + auto long_lived_tree = bottom_up_tree(0, max_depth); + + auto depth = min_depth; + while (depth <= max_depth) { + auto iterations = _int.pow(2, (max_depth - depth + min_depth) as uint); + auto chk = 0; + + auto i = 1; + while (i <= iterations) { + auto temp_tree = bottom_up_tree(i, depth); + chk += item_check(temp_tree); + + temp_tree = bottom_up_tree(-i, depth); + chk += item_check(temp_tree); + + i += 1; + } + + log #fmt("%d\t trees of depth %d\t check: %d", + iterations * 2, depth, chk); + + depth += 2; + } + + log #fmt("long lived trees of depth %d\t check: %d", + max_depth, item_check(long_lived_tree)); }
\ No newline at end of file |