about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEric Holk <eric.holk@gmail.com>2012-06-26 14:04:15 -0700
committerEric Holk <eric.holk@gmail.com>2012-06-26 14:08:16 -0700
commitccd2394ff9ccff11950d0830aaeb74f4fabb7d9c (patch)
treeb3ae705168bf84b3f6273659edbf45c0e4c1a158
parenta08281616f5afcf7b134159a919e76829d2f2a8d (diff)
downloadrust-ccd2394ff9ccff11950d0830aaeb74f4fabb7d9c.tar.gz
rust-ccd2394ff9ccff11950d0830aaeb74f4fabb7d9c.zip
perf: improved the core-std benchmark
-rw-r--r--src/libstd/map.rs2
-rw-r--r--src/test/bench/core-std.rs30
2 files changed, 29 insertions, 3 deletions
diff --git a/src/libstd/map.rs b/src/libstd/map.rs
index 7d1e7b599a0..00d4a5e6b31 100644
--- a/src/libstd/map.rs
+++ b/src/libstd/map.rs
@@ -326,7 +326,7 @@ Convert a set into a vector.
 fn vec_from_set<T: copy>(s: set<T>) -> [T]/~ {
     let mut v = []/~;
     s.each_key() {|k|
-        v += [k]/~;
+        vec::push(v, k);
         true
     };
     v
diff --git a/src/test/bench/core-std.rs b/src/test/bench/core-std.rs
index 823900ac55b..9ea0ad51feb 100644
--- a/src/test/bench/core-std.rs
+++ b/src/test/bench/core-std.rs
@@ -3,17 +3,25 @@
 use std;
 
 import std::time::precise_time_s;
+import std::map;
+import std::map::{map, hashmap};
 
 import io::{reader, reader_util};
 
-fn main() {
+fn main(argv: [str]/~) {
     #macro[
         [#bench[id],
-         run_test(#stringify(id), id)]
+         if tests.len() == 0 || vec::contains(tests, #stringify(id)) {
+             run_test(#stringify(id), id);
+         }
+        ]
     ];
 
+    let tests = vec::view(argv, 1, argv.len());
+
     #bench[shift_push];
     #bench[read_line];
+    #bench[str_set];
 }
 
 fn run_test(name: str, test: fn()) {
@@ -46,3 +54,21 @@ fn read_line() {
         }
     }
 }
+
+fn str_set() {
+    let r = rand::rng();
+
+    let s = map::hashmap(str::hash, str::eq);
+
+    for int::range(0, 1000) {|_i|
+        map::set_add(s, r.gen_str(10));
+    }
+    
+    let mut found = 0;
+    for int::range(0, 1000) {|_i|
+        alt s.find(r.gen_str(10)) {
+          some(_) { found += 1; }
+          none { }
+        }
+    }
+}