diff --git a/.travis.yml b/.travis.yml index 87270d5..0884694 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,6 @@ rust: script: | cargo build --verbose && cargo test --verbose && - ([ $TRAVIS_RUST_VERSION != nightly ] || cargo test --verbose --features benchmarks) && - ([ $TRAVIS_RUST_VERSION != nightly ] || cargo bench --verbose --features benchmarks bench) + ([ $TRAVIS_RUST_VERSION != nightly ] || cargo bench --verbose bench) notifications: webhooks: http://build.servo.org:54856/travis diff --git a/Cargo.toml b/Cargo.toml index bf4880b..df4aa31 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,3 @@ documentation = "http://doc.servo.org/smallvec/" name = "smallvec" path = "lib.rs" doctest = false - -[features] -benchmarks = [] diff --git a/benches/bench.rs b/benches/bench.rs new file mode 100644 index 0000000..8acb3c9 --- /dev/null +++ b/benches/bench.rs @@ -0,0 +1,65 @@ +#![feature(test)] + +extern crate smallvec; +extern crate test; + +use smallvec::SmallVec; +use self::test::Bencher; + +#[bench] +fn bench_push(b: &mut Bencher) { + #[inline(never)] + fn push_noinline(vec: &mut SmallVec<[u64; 16]>, x: u64) { + vec.push(x) + } + + b.iter(|| { + let mut vec: SmallVec<[u64; 16]> = SmallVec::new(); + for x in 0..100 { + push_noinline(&mut vec, x); + } + vec + }); +} + +#[bench] +fn bench_insert(b: &mut Bencher) { + #[inline(never)] + fn insert_noinline(vec: &mut SmallVec<[u64; 16]>, x: u64) { + vec.insert(0, x) + } + + b.iter(|| { + let mut vec: SmallVec<[u64; 16]> = SmallVec::new(); + for x in 0..100 { + insert_noinline(&mut vec, x); + } + vec + }); +} + +#[bench] +fn bench_extend(b: &mut Bencher) { + b.iter(|| { + let mut vec: SmallVec<[u64; 16]> = SmallVec::new(); + vec.extend(0..100); + vec + }); +} + +#[bench] +fn bench_pushpop(b: &mut Bencher) { + #[inline(never)] + fn pushpop_noinline(vec: &mut SmallVec<[u64; 16]>, x: u64) { + vec.push(x); + vec.pop(); + } + + b.iter(|| { + let mut vec: SmallVec<[u64; 16]> = SmallVec::new(); + for x in 0..100 { + pushpop_noinline(&mut vec, x); + } + vec + }); +} diff --git a/lib.rs b/lib.rs index 8f64a1e..09ecbba 100644 --- a/lib.rs +++ b/lib.rs @@ -5,8 +5,6 @@ //! Small vectors in various sizes. These store a certain number of elements inline and fall back //! to the heap for larger allocations. -#![cfg_attr(feature = "benchmarks", feature(test))] - use std::borrow::{Borrow, BorrowMut}; use std::cmp; use std::fmt; @@ -1010,53 +1008,3 @@ pub mod tests { assert_eq!(vec.drain().len(), 3); } } - -#[cfg(all(feature = "benchmarks", test))] -mod bench { - extern crate test; - use SmallVec; - use self::test::Bencher; - - #[bench] - fn bench_push(b: &mut Bencher) { - b.iter(|| { - let mut vec: SmallVec<[u64; 16]> = SmallVec::new(); - for x in 0..100 { - vec.push(x); - } - vec - }); - } - - #[bench] - fn bench_insert(b: &mut Bencher) { - b.iter(|| { - let mut vec: SmallVec<[u64; 16]> = SmallVec::new(); - for x in 0..100 { - vec.insert(0, x); - } - vec - }); - } - - #[bench] - fn bench_extend(b: &mut Bencher) { - b.iter(|| { - let mut vec: SmallVec<[u64; 16]> = SmallVec::new(); - vec.extend(0..100); - vec - }); - } - - #[bench] - fn bench_pushpop(b: &mut Bencher) { - b.iter(|| { - let mut vec: SmallVec<[u64; 16]> = SmallVec::new(); - for x in 0..100 { - vec.push(x); - vec.pop(); - } - vec - }); - } -}