dyn_vec 0.1.0

A Vec<T: ?Sized>
Documentation
//! `-Zmiri-disable-isolation` needed to run these under miri

use test::{black_box, Bencher};

extern crate test;

use super::DynVec;
use std::{fmt::Debug, mem, vec::Vec};

#[bench]
#[cfg_attr(miri, ignore)]
fn std_push(b: &mut Bencher) {
    let mut vec = Vec::new();

    b.iter(|| vec.push(black_box(5)));

    black_box(vec);
}

#[bench]
#[cfg_attr(miri, ignore)]
fn dyn_push(b: &mut Bencher) {
    let mut vec = DynVec::new();

    b.iter(|| vec.push(black_box(5)));

    black_box(vec);
}

#[bench]
#[cfg_attr(miri, ignore)]
fn std_push_box(b: &mut Bencher) {
    let mut vec = Vec::new();

    b.iter(|| vec.push(black_box(Box::new(5) as Box<dyn Debug>)));

    black_box(vec);
}

#[bench]
#[cfg_attr(miri, ignore)]
fn dyn_push_unsize(b: &mut Bencher) {
    let mut vec = DynVec::new();

    b.iter(|| vec.push_unsize_stable(black_box(5), |v| v as &dyn Debug));

    black_box(vec);
}

#[bench]
#[cfg_attr(miri, ignore)]
fn dyn_push_box(b: &mut Bencher) {
    let mut vec = DynVec::new();

    b.iter(|| vec.push_box(black_box(Box::new(5) as Box<dyn Debug>)));

    black_box(vec);
}

#[bench]
#[cfg_attr(miri, ignore)]
fn dyn_push_then_unsize(b: &mut Bencher) {
    let mut vec = DynVec::new();

    b.iter(|| vec.push(black_box(5)));

    let vec = black_box(vec).unsize_stable(|v| v as &dyn Debug);

    black_box(vec);
}

#[bench]
#[cfg_attr(miri, ignore)]
fn box_forget(b: &mut Bencher) {
    b.iter(|| mem::forget(black_box(Box::new(black_box(5)))));
}

#[bench]
#[cfg_attr(miri, ignore)]
fn box_dealloc(b: &mut Bencher) {
    b.iter(|| drop(black_box(Box::new(black_box(5)))));
}