Skip to content

Commit ccd2394

Browse files
committed
perf: improved the core-std benchmark
1 parent a082816 commit ccd2394

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

src/libstd/map.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ Convert a set into a vector.
326326
fn vec_from_set<T: copy>(s: set<T>) -> [T]/~ {
327327
let mut v = []/~;
328328
s.each_key() {|k|
329-
v += [k]/~;
329+
vec::push(v, k);
330330
true
331331
};
332332
v

src/test/bench/core-std.rs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,25 @@
33
use std;
44

55
import std::time::precise_time_s;
6+
import std::map;
7+
import std::map::{map, hashmap};
68

79
import io::{reader, reader_util};
810

9-
fn main() {
11+
fn main(argv: [str]/~) {
1012
#macro[
1113
[#bench[id],
12-
run_test(#stringify(id), id)]
14+
if tests.len() == 0 || vec::contains(tests, #stringify(id)) {
15+
run_test(#stringify(id), id);
16+
}
17+
]
1318
];
1419

20+
let tests = vec::view(argv, 1, argv.len());
21+
1522
#bench[shift_push];
1623
#bench[read_line];
24+
#bench[str_set];
1725
}
1826

1927
fn run_test(name: str, test: fn()) {
@@ -46,3 +54,21 @@ fn read_line() {
4654
}
4755
}
4856
}
57+
58+
fn str_set() {
59+
let r = rand::rng();
60+
61+
let s = map::hashmap(str::hash, str::eq);
62+
63+
for int::range(0, 1000) {|_i|
64+
map::set_add(s, r.gen_str(10));
65+
}
66+
67+
let mut found = 0;
68+
for int::range(0, 1000) {|_i|
69+
alt s.find(r.gen_str(10)) {
70+
some(_) { found += 1; }
71+
none { }
72+
}
73+
}
74+
}

0 commit comments

Comments
 (0)