about summary refs log tree commit diff
path: root/src/test/bench/std-smallintmap.rs
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2012-05-15 06:00:55 -0700
committerNiko Matsakis <niko@alum.mit.edu>2012-05-18 20:00:51 -0700
commitb4be2c676f713f0dcbad2343db5af81b3caa4966 (patch)
tree526057b9f0eed180e2b630a6b8c286c9dd1e8768 /src/test/bench/std-smallintmap.rs
parentbfde2ba524559aeb5abcfce72d933d74d1226d67 (diff)
downloadrust-b4be2c676f713f0dcbad2343db5af81b3caa4966.tar.gz
rust-b4be2c676f713f0dcbad2343db5af81b3caa4966.zip
create a smallintmap benchmark
Diffstat (limited to 'src/test/bench/std-smallintmap.rs')
-rw-r--r--src/test/bench/std-smallintmap.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/test/bench/std-smallintmap.rs b/src/test/bench/std-smallintmap.rs
new file mode 100644
index 00000000000..d524400750a
--- /dev/null
+++ b/src/test/bench/std-smallintmap.rs
@@ -0,0 +1,46 @@
+// Microbenchmark for the smallintmap library
+
+use std;
+import std::smallintmap;
+import std::smallintmap::{smallintmap, map};
+import io::writer_util;
+
+fn append_sequential(min: uint, max: uint, map: smallintmap<uint>) {
+    uint::range(min, max) { |i|
+        map.insert(i, i + 22u);
+    }
+}
+
+fn check_sequential(min: uint, max: uint, map: smallintmap<uint>) {
+    uint::range(min, max) { |i|
+        assert map.get(i) == i + 22u;
+    }
+}
+
+fn main(args: [str]) {
+    let args = if vec::len(args) <= 1u {["", "1000000", "100"]} else {args};
+    let max = uint::from_str(args[1]).get();
+    let rep = uint::from_str(args[2]).get();
+
+    let mut checkf = 0.0;
+    let mut appendf = 0.0;
+
+    uint::range(0u, rep) {|_r|
+        let map = smallintmap::mk();
+        let start = std::time::precise_time_s();
+        append_sequential(0u, max, map);
+        let mid = std::time::precise_time_s();
+        check_sequential(0u, max, map);
+        let end = std::time::precise_time_s();
+
+        checkf += (end - mid) as float;
+        appendf += (mid - start) as float;
+    }
+
+    let maxf = max as float;
+
+    io::stdout().write_str(#fmt("insert(): %? seconds\n", checkf));
+    io::stdout().write_str(#fmt("        : %f op/sec\n", maxf/checkf));
+    io::stdout().write_str(#fmt("get()   : %? seconds\n", appendf));
+    io::stdout().write_str(#fmt("        : %f op/sec\n", maxf/appendf));
+}
\ No newline at end of file