1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#![feature(test)]
#![cfg_attr(feature = "cargo-clippy", allow(needless_range_loop))]
extern crate slice_ring_buffer;
extern crate test;
use std::collections::VecDeque;
const MAX_IDX: usize = 100_000;
#[bench]
fn get_contiguous_std_vecdeque(b: &mut test::Bencher) {
let mut deq = VecDeque::<u8>::with_capacity(MAX_IDX);
deq.resize(MAX_IDX, 3);
b.iter(|| {
for i in 0..MAX_IDX {
test::black_box(&deq.get(i));
}
});
}
#[bench]
fn get_contiguous_slice_ring_buffer(b: &mut test::Bencher) {
let mut deq =
slice_ring_buffer::SliceRingBuffer::<u8>::with_capacity(MAX_IDX);
deq.resize(MAX_IDX, 3);
b.iter(|| {
for i in 0..MAX_IDX {
test::black_box(&deq.get(i));
}
});
}
#[bench]
fn get_contiguous_slice_ring_buffer_unchecked(b: &mut test::Bencher) {
let mut deq =
slice_ring_buffer::SliceRingBuffer::<u8>::with_capacity(MAX_IDX);
deq.resize(MAX_IDX, 3);
b.iter(|| {
for i in 0..MAX_IDX {
unsafe {
test::black_box(&deq.get_unchecked(i));
}
}
});
}
#[bench]
fn get_chunked_std_vecdeque(b: &mut test::Bencher) {
let mut deq = VecDeque::<u8>::with_capacity(MAX_IDX);
deq.resize(MAX_IDX, 3);
for _ in 0..MAX_IDX / 2 {
deq.pop_front();
}
for _ in 0..MAX_IDX / 4 {
deq.push_back(3);
}
b.iter(|| {
for i in 0..MAX_IDX / 4 * 3 {
test::black_box(&deq.get(i));
}
});
}
#[bench]
fn get_chunked_slice_ring_buffer(b: &mut test::Bencher) {
let mut deq =
slice_ring_buffer::SliceRingBuffer::<u8>::with_capacity(MAX_IDX);
deq.resize(MAX_IDX, 3);
for _ in 0..MAX_IDX / 2 {
deq.pop_front();
}
for _ in 0..MAX_IDX / 4 {
deq.push_back(3);
}
b.iter(|| {
for i in 0..MAX_IDX / 4 * 3 {
test::black_box(&deq.get(i));
}
});
}
#[bench]
fn get_chunked_slice_ring_buffer_unchecked(b: &mut test::Bencher) {
let mut deq =
slice_ring_buffer::SliceRingBuffer::<u8>::with_capacity(MAX_IDX);
deq.resize(MAX_IDX, 3);
for _ in 0..MAX_IDX / 2 {
deq.pop_front();
}
for _ in 0..MAX_IDX / 4 {
deq.push_back(3);
}
b.iter(|| {
for i in 0..MAX_IDX / 4 * 3 {
unsafe {
test::black_box(&deq.get_unchecked(i));
}
}
});
}
|