Skip to content

Commit 7d38994

Browse files
committed
collections: flesh out the Vec::clone_from benchmarks to cover reuse
1 parent 90fe1a6 commit 7d38994

File tree

1 file changed

+93
-30
lines changed

1 file changed

+93
-30
lines changed

src/libcollections/vec.rs

Lines changed: 93 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2209,78 +2209,141 @@ mod tests {
22092209
do_bench_clone(b, 1000)
22102210
}
22112211

2212-
fn do_bench_clone_from(b: &mut Bencher, dst_len: uint, src_len: uint) {
2212+
fn do_bench_clone_from(b: &mut Bencher, times: uint, dst_len: uint, src_len: uint) {
22132213
let dst: Vec<uint> = FromIterator::from_iter(range(0, src_len));
22142214
let src: Vec<uint> = FromIterator::from_iter(range(dst_len, dst_len + src_len));
22152215

2216-
b.bytes = src_len as u64;
2216+
b.bytes = (times * src_len) as u64;
22172217

22182218
b.iter(|| {
22192219
let mut dst = dst.clone();
2220-
let src = src.clone();
2221-
dst.clone_from(&src);
2222-
assert_eq!(dst.len(), src_len);
2223-
assert!(dst.iter().enumerate().all(|(i, x)| dst_len + i == *x));
2220+
2221+
for _ in range(0, times) {
2222+
dst.clone_from(&src);
2223+
2224+
assert_eq!(dst.len(), src_len);
2225+
assert!(dst.iter().enumerate().all(|(i, x)| dst_len + i == *x));
2226+
}
22242227
});
22252228
}
22262229

22272230
#[bench]
2228-
fn bench_clone_from_0000_0000(b: &mut Bencher) {
2229-
do_bench_clone_from(b, 0, 0)
2231+
fn bench_clone_from_01_0000_0000(b: &mut Bencher) {
2232+
do_bench_clone_from(b, 1, 0, 0)
2233+
}
2234+
2235+
#[bench]
2236+
fn bench_clone_from_01_0000_0010(b: &mut Bencher) {
2237+
do_bench_clone_from(b, 1, 0, 10)
2238+
}
2239+
2240+
#[bench]
2241+
fn bench_clone_from_01_0000_0100(b: &mut Bencher) {
2242+
do_bench_clone_from(b, 1, 0, 100)
2243+
}
2244+
2245+
#[bench]
2246+
fn bench_clone_from_01_0000_1000(b: &mut Bencher) {
2247+
do_bench_clone_from(b, 1, 0, 1000)
2248+
}
2249+
2250+
#[bench]
2251+
fn bench_clone_from_01_0010_0010(b: &mut Bencher) {
2252+
do_bench_clone_from(b, 1, 10, 10)
2253+
}
2254+
2255+
#[bench]
2256+
fn bench_clone_from_01_0100_0100(b: &mut Bencher) {
2257+
do_bench_clone_from(b, 1, 100, 100)
2258+
}
2259+
2260+
#[bench]
2261+
fn bench_clone_from_01_1000_1000(b: &mut Bencher) {
2262+
do_bench_clone_from(b, 1, 1000, 1000)
2263+
}
2264+
2265+
#[bench]
2266+
fn bench_clone_from_01_0010_0100(b: &mut Bencher) {
2267+
do_bench_clone_from(b, 1, 10, 100)
2268+
}
2269+
2270+
#[bench]
2271+
fn bench_clone_from_01_0100_1000(b: &mut Bencher) {
2272+
do_bench_clone_from(b, 1, 100, 1000)
2273+
}
2274+
2275+
#[bench]
2276+
fn bench_clone_from_01_0010_0000(b: &mut Bencher) {
2277+
do_bench_clone_from(b, 1, 10, 0)
2278+
}
2279+
2280+
#[bench]
2281+
fn bench_clone_from_01_0100_0010(b: &mut Bencher) {
2282+
do_bench_clone_from(b, 1, 100, 10)
2283+
}
2284+
2285+
#[bench]
2286+
fn bench_clone_from_01_1000_0100(b: &mut Bencher) {
2287+
do_bench_clone_from(b, 1, 1000, 100)
2288+
}
2289+
2290+
#[bench]
2291+
fn bench_clone_from_10_0000_0000(b: &mut Bencher) {
2292+
do_bench_clone_from(b, 10, 0, 0)
22302293
}
22312294

22322295
#[bench]
2233-
fn bench_clone_from_0000_0010(b: &mut Bencher) {
2234-
do_bench_clone_from(b, 0, 10)
2296+
fn bench_clone_from_10_0000_0010(b: &mut Bencher) {
2297+
do_bench_clone_from(b, 10, 0, 10)
22352298
}
22362299

22372300
#[bench]
2238-
fn bench_clone_from_0000_0100(b: &mut Bencher) {
2239-
do_bench_clone_from(b, 0, 100)
2301+
fn bench_clone_from_10_0000_0100(b: &mut Bencher) {
2302+
do_bench_clone_from(b, 10, 0, 100)
22402303
}
22412304

22422305
#[bench]
2243-
fn bench_clone_from_0000_1000(b: &mut Bencher) {
2244-
do_bench_clone_from(b, 0, 1000)
2306+
fn bench_clone_from_10_0000_1000(b: &mut Bencher) {
2307+
do_bench_clone_from(b, 10, 0, 1000)
22452308
}
22462309

22472310
#[bench]
2248-
fn bench_clone_from_0010_0010(b: &mut Bencher) {
2249-
do_bench_clone_from(b, 10, 10)
2311+
fn bench_clone_from_10_0010_0010(b: &mut Bencher) {
2312+
do_bench_clone_from(b, 10, 10, 10)
22502313
}
22512314

22522315
#[bench]
2253-
fn bench_clone_from_0100_0100(b: &mut Bencher) {
2254-
do_bench_clone_from(b, 100, 100)
2316+
fn bench_clone_from_10_0100_0100(b: &mut Bencher) {
2317+
do_bench_clone_from(b, 10, 100, 100)
22552318
}
22562319

22572320
#[bench]
2258-
fn bench_clone_from_1000_1000(b: &mut Bencher) {
2259-
do_bench_clone_from(b, 1000, 1000)
2321+
fn bench_clone_from_10_1000_1000(b: &mut Bencher) {
2322+
do_bench_clone_from(b, 10, 1000, 1000)
22602323
}
22612324

22622325
#[bench]
2263-
fn bench_clone_from_0010_0100(b: &mut Bencher) {
2264-
do_bench_clone_from(b, 10, 100)
2326+
fn bench_clone_from_10_0010_0100(b: &mut Bencher) {
2327+
do_bench_clone_from(b, 10, 10, 100)
22652328
}
22662329

22672330
#[bench]
2268-
fn bench_clone_from_0100_1000(b: &mut Bencher) {
2269-
do_bench_clone_from(b, 100, 1000)
2331+
fn bench_clone_from_10_0100_1000(b: &mut Bencher) {
2332+
do_bench_clone_from(b, 10, 100, 1000)
22702333
}
22712334

22722335
#[bench]
2273-
fn bench_clone_from_0010_0000(b: &mut Bencher) {
2274-
do_bench_clone_from(b, 10, 0)
2336+
fn bench_clone_from_10_0010_0000(b: &mut Bencher) {
2337+
do_bench_clone_from(b, 10, 10, 0)
22752338
}
22762339

22772340
#[bench]
2278-
fn bench_clone_from_0100_0010(b: &mut Bencher) {
2279-
do_bench_clone_from(b, 100, 10)
2341+
fn bench_clone_from_10_0100_0010(b: &mut Bencher) {
2342+
do_bench_clone_from(b, 10, 100, 10)
22802343
}
22812344

22822345
#[bench]
2283-
fn bench_clone_from_1000_0100(b: &mut Bencher) {
2284-
do_bench_clone_from(b, 1000, 100)
2346+
fn bench_clone_from_10_1000_0100(b: &mut Bencher) {
2347+
do_bench_clone_from(b, 10, 1000, 100)
22852348
}
22862349
}

0 commit comments

Comments
 (0)