Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
criterion-stats 0.2.1 - Docs.rs
[go: Go Back, main page]

criterion-stats 0.2.1

Criterion's statistics library
Documentation
extern crate cast;
#[macro_use]
extern crate criterion;
extern crate criterion_stats as stats;
extern crate rand;

mod common_bench;

macro_rules! stat {
    ($ty:ident <- $($stat:ident),+) => {
        $(
            fn $stat(c: &mut Criterion) {
                let v = ::common_bench::vec::<$ty>();

                c.bench_function(
                    &format!("stat_{}_{}", stringify!($ty), stringify!($stat)),
                    move |b| {
                        let s = ::stats::univariate::Sample::new(&v);
                        b.iter(|| s.$stat())
                    });
            }
        )+
    }
}

macro_rules! stat_none {
    ($ty:ident <- $($stat:ident),+) => {
        $(
            fn $stat(c: &mut Criterion) {
                let v = ::common_bench::vec::<$ty>();

                c.bench_function(
                    &format!("stat_none_{}_{}", stringify!($ty), stringify!($stat)),
                    move |b| {
                        let s = ::stats::univariate::Sample::new(&v);
                        b.iter(|| s.$stat(None))
                    });
            }
        )+
    }
}

macro_rules! fast_stat {
    ($ty:ident <- $(($stat:ident, $aux_stat:ident)),+) => {
        $(
            fn $stat(c: &mut Criterion) {
                let v = ::common_bench::vec::<$ty>();

                c.bench_function(
                    &format!("fast_stat_{}_{}", stringify!($ty), stringify!($stat)),
                    move |b| {
                        let s = ::stats::univariate::Sample::new(&v);
                        let aux = Some(s.$aux_stat());
                        b.iter(|| s.$stat(aux))
                    });
            }
        )+
    }
}

macro_rules! bench {
    ($ty:ident) => {
        pub mod $ty {
            pub trait SampleExt {
                fn base_percentiles(&self) -> ::stats::univariate::Percentiles<$ty> where
                    usize: ::cast::From<$ty, Output=Result<usize, ::cast::Error>>;

                fn iqr(&self) -> $ty where
                    usize: ::cast::From<$ty, Output=Result<usize, ::cast::Error>>,
                {
                    self.base_percentiles().iqr()
                }

                fn median(&self) -> $ty where
                    usize: ::cast::From<$ty, Output=Result<usize, ::cast::Error>>,
                {
                    self.base_percentiles().median()
                }
            }
            impl SampleExt for ::stats::univariate::Sample<$ty> {
                fn base_percentiles(&self) -> ::stats::univariate::Percentiles<$ty> where
                    usize: ::cast::From<$ty, Output=Result<usize, ::cast::Error>> {
                        self.percentiles()
                    }
            }

            use criterion::Criterion;

            stat!($ty <- iqr, max, mean, median, median_abs_dev_pct, min, std_dev_pct, sum);
            stat_none!($ty <- median_abs_dev, std_dev, var);

            criterion_group!(
                name = benches;
                config = ::common_bench::reduced_samples();
                targets = iqr, max, mean, median, median_abs_dev_pct, min,
                            std_dev_pct, sum, median_abs_dev, std_dev, var);

            pub mod fast {
                use criterion::Criterion;
                use super::SampleExt;

                fast_stat!($ty <- (median_abs_dev, median), (std_dev, mean), (var, mean));
                criterion_group!(
                    name = benches;
                    config = ::common_bench::reduced_samples();
                    targets = median_abs_dev, std_dev, var);
            }
        }
    }
}

bench!(f64);

criterion_main!(f64::benches, f64::fast::benches);