nalgebra/benches/common/macros.rs

114 lines
2.8 KiB
Rust
Raw Normal View History

2015-01-08 04:11:09 +08:00
#![macro_use]
2014-11-07 23:15:56 +08:00
macro_rules! bench_binop(
($name: ident, $t1: ty, $t2: ty, $binop: ident) => {
#[bench]
fn $name(bh: &mut Bencher) {
let mut rng = IsaacRng::new_unseeded();
let a = rng.gen::<$t1>();
let b = rng.gen::<$t2>();
2014-11-07 23:15:56 +08:00
bh.iter(|| {
a.$binop(b)
})
}
}
);
macro_rules! bench_binop_ref(
($name: ident, $t1: ty, $t2: ty, $binop: ident) => {
#[bench]
fn $name(bh: &mut Bencher) {
let mut rng = IsaacRng::new_unseeded();
let a = rng.gen::<$t1>();
let b = rng.gen::<$t2>();
bh.iter(|| {
a.$binop(&b)
2014-11-07 23:15:56 +08:00
})
}
}
2014-12-27 18:15:13 +08:00
);
2014-11-07 23:15:56 +08:00
macro_rules! bench_binop_fn(
($name: ident, $t1: ty, $t2: ty, $binop: path) => {
2014-11-07 23:15:56 +08:00
#[bench]
fn $name(bh: &mut Bencher) {
let mut rng = IsaacRng::new_unseeded();
let a = rng.gen::<$t1>();
let b = rng.gen::<$t2>();
2014-11-07 23:15:56 +08:00
bh.iter(|| {
$binop(&a, &b)
2014-11-07 23:15:56 +08:00
})
}
}
2014-12-27 18:15:13 +08:00
);
2014-11-07 23:15:56 +08:00
macro_rules! bench_unop_na(
2014-11-07 23:15:56 +08:00
($name: ident, $t: ty, $unop: ident) => {
#[bench]
fn $name(bh: &mut Bencher) {
const LEN: usize = 1 << 13;
2014-11-07 23:15:56 +08:00
let mut rng = IsaacRng::new_unseeded();
let elems: Vec<$t> = (0usize .. LEN).map(|_| rng.gen::<$t>()).collect();
2014-11-07 23:15:56 +08:00
let mut i = 0;
bh.iter(|| {
i = (i + 1) & (LEN - 1);
unsafe {
2015-01-05 22:12:06 +08:00
test::black_box(na::$unop(elems.get_unchecked(i)))
2014-11-07 23:15:56 +08:00
}
})
}
}
2014-12-27 18:15:13 +08:00
);
2014-11-07 23:15:56 +08:00
macro_rules! bench_unop(
2014-11-07 23:15:56 +08:00
($name: ident, $t: ty, $unop: ident) => {
#[bench]
fn $name(bh: &mut Bencher) {
const LEN: usize = 1 << 13;
2014-11-07 23:15:56 +08:00
let mut rng = IsaacRng::new_unseeded();
let mut elems: Vec<$t> = (0usize .. LEN).map(|_| rng.gen::<$t>()).collect();
2014-11-07 23:15:56 +08:00
let mut i = 0;
bh.iter(|| {
i = (i + 1) & (LEN - 1);
unsafe {
2015-01-02 06:23:35 +08:00
test::black_box(elems.get_unchecked_mut(i).$unop())
2014-11-07 23:15:56 +08:00
}
})
}
}
2014-12-27 18:15:13 +08:00
);
2014-11-07 23:15:56 +08:00
macro_rules! bench_construction(
2015-01-10 05:52:44 +08:00
($name: ident, $constructor: path, $( $args: ident: $types: ty),*) => {
2014-11-07 23:15:56 +08:00
#[bench]
fn $name(bh: &mut Bencher) {
const LEN: usize = 1 << 13;
2014-11-07 23:15:56 +08:00
let mut rng = IsaacRng::new_unseeded();
$(let $args: Vec<$types> = (0usize .. LEN).map(|_| rng.gen::<$types>()).collect();)*
2014-11-07 23:15:56 +08:00
let mut i = 0;
bh.iter(|| {
i = (i + 1) & (LEN - 1);
unsafe {
2015-01-05 22:12:06 +08:00
let res = $constructor($(*$args.get_unchecked(i),)*);
2014-11-07 23:15:56 +08:00
test::black_box(res)
}
})
}
}
2014-12-27 18:15:13 +08:00
);