aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorBrian Anderson <[email protected]>2011-03-13 18:43:39 -0400
committerGraydon Hoare <[email protected]>2011-03-14 15:52:48 -0700
commit467b9f3908dc74976807ddad4138f3d496433234 (patch)
tree7b27f371d90c37a1c28133c53bd91db248ffca5e /src/test
parentAdd _int.pow (diff)
downloadrust-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.rs56
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