Skip to content

Commit 3232d37

Browse files
author
bors-servo
authored
Auto merge of #32 - nipunn1313:benchcrate, r=jdm
Move benchmarks to benches module with noinline wrappers This ensures that the benchmarks are in a separate crate and linked against the smallvec dynamic library rather than being compiled together. It also nicely removes the need for the "benchmarks" feature. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/rust-smallvec/32) <!-- Reviewable:end -->
2 parents 1714fbd + 59f5ea6 commit 3232d37

File tree

4 files changed

+66
-57
lines changed

4 files changed

+66
-57
lines changed

.travis.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ rust:
66
script: |
77
cargo build --verbose &&
88
cargo test --verbose &&
9-
([ $TRAVIS_RUST_VERSION != nightly ] || cargo test --verbose --features benchmarks) &&
10-
([ $TRAVIS_RUST_VERSION != nightly ] || cargo bench --verbose --features benchmarks bench)
9+
([ $TRAVIS_RUST_VERSION != nightly ] || cargo bench --verbose bench)
1110
notifications:
1211
webhooks: http://build.servo.org:54856/travis

Cargo.toml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,3 @@ documentation = "http://doc.servo.org/smallvec/"
1313
name = "smallvec"
1414
path = "lib.rs"
1515
doctest = false
16-
17-
[features]
18-
benchmarks = []

benches/bench.rs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#![feature(test)]
2+
3+
extern crate smallvec;
4+
extern crate test;
5+
6+
use smallvec::SmallVec;
7+
use self::test::Bencher;
8+
9+
#[bench]
10+
fn bench_push(b: &mut Bencher) {
11+
#[inline(never)]
12+
fn push_noinline(vec: &mut SmallVec<[u64; 16]>, x: u64) {
13+
vec.push(x)
14+
}
15+
16+
b.iter(|| {
17+
let mut vec: SmallVec<[u64; 16]> = SmallVec::new();
18+
for x in 0..100 {
19+
push_noinline(&mut vec, x);
20+
}
21+
vec
22+
});
23+
}
24+
25+
#[bench]
26+
fn bench_insert(b: &mut Bencher) {
27+
#[inline(never)]
28+
fn insert_noinline(vec: &mut SmallVec<[u64; 16]>, x: u64) {
29+
vec.insert(0, x)
30+
}
31+
32+
b.iter(|| {
33+
let mut vec: SmallVec<[u64; 16]> = SmallVec::new();
34+
for x in 0..100 {
35+
insert_noinline(&mut vec, x);
36+
}
37+
vec
38+
});
39+
}
40+
41+
#[bench]
42+
fn bench_extend(b: &mut Bencher) {
43+
b.iter(|| {
44+
let mut vec: SmallVec<[u64; 16]> = SmallVec::new();
45+
vec.extend(0..100);
46+
vec
47+
});
48+
}
49+
50+
#[bench]
51+
fn bench_pushpop(b: &mut Bencher) {
52+
#[inline(never)]
53+
fn pushpop_noinline(vec: &mut SmallVec<[u64; 16]>, x: u64) {
54+
vec.push(x);
55+
vec.pop();
56+
}
57+
58+
b.iter(|| {
59+
let mut vec: SmallVec<[u64; 16]> = SmallVec::new();
60+
for x in 0..100 {
61+
pushpop_noinline(&mut vec, x);
62+
}
63+
vec
64+
});
65+
}

lib.rs

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
//! Small vectors in various sizes. These store a certain number of elements inline and fall back
66
//! to the heap for larger allocations.
77
8-
#![cfg_attr(feature = "benchmarks", feature(test))]
9-
108
use std::borrow::{Borrow, BorrowMut};
119
use std::cmp;
1210
use std::fmt;
@@ -1010,53 +1008,3 @@ pub mod tests {
10101008
assert_eq!(vec.drain().len(), 3);
10111009
}
10121010
}
1013-
1014-
#[cfg(all(feature = "benchmarks", test))]
1015-
mod bench {
1016-
extern crate test;
1017-
use SmallVec;
1018-
use self::test::Bencher;
1019-
1020-
#[bench]
1021-
fn bench_push(b: &mut Bencher) {
1022-
b.iter(|| {
1023-
let mut vec: SmallVec<[u64; 16]> = SmallVec::new();
1024-
for x in 0..100 {
1025-
vec.push(x);
1026-
}
1027-
vec
1028-
});
1029-
}
1030-
1031-
#[bench]
1032-
fn bench_insert(b: &mut Bencher) {
1033-
b.iter(|| {
1034-
let mut vec: SmallVec<[u64; 16]> = SmallVec::new();
1035-
for x in 0..100 {
1036-
vec.insert(0, x);
1037-
}
1038-
vec
1039-
});
1040-
}
1041-
1042-
#[bench]
1043-
fn bench_extend(b: &mut Bencher) {
1044-
b.iter(|| {
1045-
let mut vec: SmallVec<[u64; 16]> = SmallVec::new();
1046-
vec.extend(0..100);
1047-
vec
1048-
});
1049-
}
1050-
1051-
#[bench]
1052-
fn bench_pushpop(b: &mut Bencher) {
1053-
b.iter(|| {
1054-
let mut vec: SmallVec<[u64; 16]> = SmallVec::new();
1055-
for x in 0..100 {
1056-
vec.push(x);
1057-
vec.pop();
1058-
}
1059-
vec
1060-
});
1061-
}
1062-
}

0 commit comments

Comments
 (0)