spitzenfinder 0.4.4

A program to find peaks and plot fourier.out files of the VIBES program.
Documentation
use peak_finder::data::FourierData;
use std::collections::HashMap;
mod file_setup;

#[test]
fn test_iter() {
    let get_test_file_handle = file_setup::setup_fourier().unwrap();
    let mut test_file: FourierData = FourierData::new(get_test_file_handle, 4.0_f32).unwrap();
    assert_eq!(test_file.next(), Some((3.000, 4.060)));
    assert_eq!(test_file.next(), Some((3.001, 5.120)));
    assert_eq!(test_file.next(), Some((4.002, 4.240)));
    assert_eq!(test_file.next(), Some((10.123, 4.360)));
    assert_eq!(test_file.next(), None);
}

#[test]
fn test_threshold() {
    let get_test_file_handle = file_setup::setup_fourier().unwrap();
    let test_file: FourierData = FourierData::new(get_test_file_handle, 4.0_f32).unwrap();
    assert_eq!(test_file.data.len(), 4);
}

#[test]
fn test_all_local_maxima() {
    let get_test_file_handle = file_setup::setup_fourier().unwrap();
    let test_file: FourierData = FourierData::new(get_test_file_handle, 0.0).unwrap();
    let test_hashmap: HashMap<usize, (f32, f32)> =
        FourierData::all_local_maxima(&test_file).unwrap();
    let mut reference_hashmap: HashMap<usize, (f32, f32)> = HashMap::new();
    reference_hashmap.insert(3_usize, (3.001, 5.120));
    reference_hashmap.insert(8_usize, (10.123, 4.360));
    assert_eq!(test_hashmap, reference_hashmap);
}

#[test]
fn test_mean_intensities() {
    let get_test_file_handle = file_setup::setup_fourier().unwrap();
    let test_file: FourierData = FourierData::new(get_test_file_handle, 4.0_f32).unwrap();
    assert_eq!(
        (4.060 + 5.120 + 4.240 + 4.360) / 4.0_f32,
        FourierData::mean_intensities(&test_file)
    );
}

#[test]
fn test_variance_intensities() {
    let get_test_file_handle = file_setup::setup_fourier().unwrap();
    let test_file: FourierData = FourierData::new(get_test_file_handle, 4.0_f32).unwrap();
    let mean = (4.060 + 5.120 + 4.240 + 4.360) / 4.0_f32;
    let std = ((4.060 - mean).powi(2)
        + (5.120 - mean).powi(2)
        + (4.240 - mean).powi(2)
        + (4.360 - mean).powi(2))
        / 4.0_f32;
    assert_eq!(
        std,
        FourierData::variance_intensities(
            test_file.clone(),
            FourierData::mean_intensities(&test_file)
        )
    );
}
#[test]
fn test_shift_energies() {
    let get_test_file_handle = file_setup::setup_fourier().unwrap();
    let mut test_file: FourierData = FourierData::new(get_test_file_handle, 4.0_f32).unwrap();
    FourierData::shift_energies(&mut test_file, 2.0_f32);
    assert_eq!(test_file.next(), Some((5.000, 4.060)));
    assert_eq!(test_file.next(), Some((5.001, 5.120)));
    assert_eq!(test_file.next(), Some((6.002, 4.240)));
    assert_eq!(test_file.next(), Some((12.123, 4.360)));
    assert_eq!(test_file.next(), None);
}