smlm-sig-proc 0.3.0

Signal processing library with a focus on smlm and super resolution microscopy methods
Documentation
pub mod naive;
pub mod shifted;
pub mod two_pass;
pub mod welfords;

use std::ops::{AddAssign, Sub, Div};

use num_traits::{Zero, One};


#[derive(Debug)]
pub enum Method 
{
	Naive,
	Shifted,
	TwoPass,
	Welfords,
}

pub fn variance<T>(items : &[T], method: Method) -> T
where T: Zero + One + AddAssign + Sub<Output=T> + Div<Output=T> + Copy + std::fmt::Display,
{
	match method
	{
		Method::Naive => naive::variance(items),
		Method::Shifted => shifted::variance(items),
		Method::TwoPass => two_pass::variance(items),
		Method::Welfords => welfords::variance(items)
	}
}

#[cfg(test)]
mod tests 
{
	use super::*;

	const DATA: [f64; 4] = [4.0, 7.0, 13.0, 16.0];

	#[test]
	fn basic() 
	{
		assert_eq!(variance(&DATA, Method::Naive), 30.0);
		assert_eq!(variance(&DATA, Method::Shifted), 30.0);
		assert_eq!(variance(&DATA, Method::TwoPass), 30.0);
		assert_eq!(variance(&DATA, Method::Welfords), 30.0);
	}
}