#![allow(missing_docs)]
use std::{hint::black_box, num::NonZeroUsize};
use criterion::{Criterion, criterion_group, criterion_main};
use rand::{RngExt, SeedableRng};
use rand_xoshiro::Xoshiro128StarStar;
use zoomvtools::average::average2;
fn bench_average2_8bit(c: &mut Criterion) {
c.bench_function("average2 8-bit", |b| {
let mut rng = Xoshiro128StarStar::from_seed(*b"deadbeeflolcakes");
let resolution = NonZeroUsize::new(256).unwrap();
let mut src1 = vec![0u8; resolution.get() * resolution.get()];
let mut src2 = vec![0u8; resolution.get() * resolution.get()];
let mut dest = vec![0u8; resolution.get() * resolution.get()];
for p in src1.iter_mut() {
*p = rng.random();
}
for p in src2.iter_mut() {
*p = rng.random();
}
b.iter(|| {
average2(
black_box(&mut dest),
black_box(&src1),
black_box(&src2),
black_box(resolution),
black_box(resolution),
black_box(resolution),
)
})
});
}
fn bench_average2_16bit(c: &mut Criterion) {
c.bench_function("average2 16-bit", |b| {
let mut rng = Xoshiro128StarStar::from_seed(*b"deadbeeflolcakes");
let resolution = NonZeroUsize::new(256).unwrap();
let mut src1 = vec![0u16; resolution.get() * resolution.get()];
let mut src2 = vec![0u16; resolution.get() * resolution.get()];
let mut dest = vec![0u16; resolution.get() * resolution.get()];
for p in src1.iter_mut() {
*p = rng.random();
}
for p in src2.iter_mut() {
*p = rng.random();
}
b.iter(|| {
average2(
black_box(&mut dest),
black_box(&src1),
black_box(&src2),
black_box(resolution),
black_box(resolution),
black_box(resolution),
)
})
});
}
criterion_group!(benches, bench_average2_8bit, bench_average2_16bit);
criterion_main!(benches);