bounced 0.2.0

Debouncing and Testing for Signals and Buttons
Documentation
use bounced::samples;
use criterion::{black_box, criterion_group, criterion_main, Criterion};

#[inline]
pub fn ceiling_division_by_branch(dividend: usize, divisor: usize) -> usize {
	if dividend > 0 {
		1 + (dividend - 1) / divisor
	} else {
		0
	}
}

#[inline]
pub fn ceiling_division_by_cond(dividend: usize, divisor: usize) -> usize {
	(dividend > 0) as usize * (1 + (dividend - 1) / divisor)
}

#[inline]
pub fn ceiling_division_by_mod(dividend: usize, divisor: usize) -> usize {
	let is_rem = dividend % divisor > 0;
	dividend / divisor + is_rem as usize
}

fn benchmark_branch(c: &mut Criterion) {
	c.bench_function("branch", |b| {
		b.iter(|| ceiling_division_by_branch(black_box(10500), black_box(1000)))
	});
	c.bench_function("cond", |b| {
		b.iter(|| ceiling_division_by_cond(black_box(10500), black_box(1000)))
	});
	c.bench_function("samples", |b| {
		b.iter(|| samples(black_box(500), black_box(21)))
	});
}

fn benchmark_mod(c: &mut Criterion) {
	c.bench_function("mod", |b| {
		b.iter(|| ceiling_division_by_mod(black_box(10500), black_box(1000)))
	});
}

criterion_group!(benches, benchmark_mod, benchmark_branch);
criterion_main!(benches);