1 #![macro_use] 2 3 macro_rules! bench_binop( 4 ($name: ident, $t1: ty, $t2: ty, $binop: ident) => { 5 fn $name(bh: &mut criterion::Criterion) { 6 use rand::SeedableRng; 7 let mut rng = IsaacRng::seed_from_u64(0); 8 let a = rng.gen::<$t1>(); 9 let b = rng.gen::<$t2>(); 10 11 bh.bench_function(stringify!($name), move |bh| bh.iter(|| { 12 a.$binop(b) 13 })); 14 } 15 } 16 ); accept()17 18 macro_rules! bench_binop_ref( 19 ($name: ident, $t1: ty, $t2: ty, $binop: ident) => { 20 fn $name(bh: &mut criterion::Criterion) { 21 use rand::SeedableRng; 22 let mut rng = IsaacRng::seed_from_u64(0); 23 let a = rng.gen::<$t1>(); 24 let b = rng.gen::<$t2>(); 25 26 bh.bench_function(stringify!($name), move |bh| bh.iter(|| { 27 a.$binop(&b) 28 })); 29 } 30 } 31 ); 32 33 macro_rules! bench_binop_fn( 34 ($name: ident, $t1: ty, $t2: ty, $binop: path) => { 35 fn $name(bh: &mut criterion::Criterion) { 36 use rand::SeedableRng; 37 let mut rng = IsaacRng::seed_from_u64(0); 38 let a = rng.gen::<$t1>(); 39 let b = rng.gen::<$t2>(); 40 41 bh.bench_function(stringify!($name), move |bh| bh.iter(|| { 42 $binop(&a, &b) 43 })); 44 } 45 } 46 ); 47 48 macro_rules! bench_unop_na( 49 ($name: ident, $t: ty, $unop: ident) => { 50 fn $name(bh: &mut criterion::Criterion) { connect()51 const LEN: usize = 1 << 13; 52 53 use rand::SeedableRng; 54 let mut rng = IsaacRng::seed_from_u64(0); 55 56 let elems: Vec<$t> = (0usize .. LEN).map(|_| rng.gen::<$t>()).collect(); 57 let mut i = 0; 58 59 bh.bench_function(stringify!($name), move |bh| bh.iter(|| { 60 i = (i + 1) & (LEN - 1); 61 62 unsafe { 63 test::black_box(na::$unop(elems.get_unchecked(i))) 64 } 65 })); 66 } 67 } 68 ); 69 70 macro_rules! bench_unop( 71 ($name: ident, $t: ty, $unop: ident) => { 72 fn $name(bh: &mut criterion::Criterion) { 73 const LEN: usize = 1 << 13; 74 75 use rand::SeedableRng; 76 let mut rng = IsaacRng::seed_from_u64(0); 77 78 let mut elems: Vec<$t> = (0usize .. LEN).map(|_| rng.gen::<$t>()).collect(); 79 let mut i = 0; 80 81 bh.bench_function(stringify!($name), move |bh| bh.iter(|| { 82 i = (i + 1) & (LEN - 1); 83 84 unsafe { 85 test::black_box(elems.get_unchecked_mut(i).$unop()) 86 } 87 })); 88 } 89 } 90 ); 91 92 macro_rules! bench_construction( 93 ($name: ident, $constructor: path, $( $args: ident: $types: ty),*) => { 94 fn $name(bh: &mut criterion::Criterion) { 95 const LEN: usize = 1 << 13; 96 97 use rand::SeedableRng; 98 let mut rng = IsaacRng::seed_from_u64(0); 99 100 $(let $args: Vec<$types> = (0usize .. LEN).map(|_| rng.gen::<$types>()).collect();)* 101 let mut i = 0; 102 103 bh.bench_function(stringify!($name), move |bh| bh.iter(|| { 104 i = (i + 1) & (LEN - 1); 105 106 unsafe { 107 let res = $constructor($(*$args.get_unchecked(i),)*); 108 test::black_box(res) 109 } 110 })); read()111 } 112 } 113 ); 114