peroxide 0.31.5

Rust comprehensive scientific computation library contains linear algebra, numerical analysis, statistics and machine learning tools with farmiliar syntax
Documentation
#[macro_use]
extern crate peroxide;
extern crate float_cmp;

use peroxide::fuga::*;

use float_cmp::approx_eq;

#[test]
fn median_test() {
    let x = c!(
        -0.2916147, -0.3337195, -1.0122433, 0.2277551, -0.6411655, -0.8884030, 0.9815194,
        0.4349972, 1.3155894, -0.9229355, -1.3184645, -1.8527022, -0.1456019, 0.8760155, 0.8440163,
        0.8368303, -0.3762078, -0.2943640, 1.7240564, 0.1205960, -0.6159046, -0.1198179,
        -0.1825441, -0.7661009, -1.0707063, 1.8720706, 2.6693305, 1.5127834, -1.5052847, 0.3765511
    );

    let med = x.quantile(0.5, Type2);
    assert_eq!(med, -0.164073);
}

#[test]
fn quantile_test() {
    let x = c!(
        1.72167933,
        -0.06601524,
        0.87758267,
        1.83685825,
        -0.59429329,
        0.07168048,
        -0.78776783,
        -1.91376887,
        0.10569423,
        -0.07719739,
        3.42862409,
        -0.73265391,
        -0.44499621,
        1.16806751,
        -1.34794859,
        -0.54140654,
        -1.62862235,
        -0.55479844,
        -0.91070675,
        -0.35872557,
        0.02123678,
        -0.36700077,
        1.82274001,
        -0.94475479,
        0.33456427,
        -0.60531382,
        1.57232375,
        0.33201748,
        -0.61781348,
        0.88329755
    );

    let r_quant1 = c!(-1.9137689, -0.6178135, -0.3587256, 0.8775827, 3.4286241);
    let r_quant2 = c!(-1.9137689, -0.6178135, -0.2179615, 0.8775827, 3.4286241);

    let quant1 = quantile(&x, Type1);
    let quant2 = quantile(&x, Type2);

    for i in 0..r_quant1.len() {
        if approx_eq!(f64, quant1[i], r_quant1[i], ulps = 7)
            || approx_eq!(f64, quant2[i], r_quant2[i], ulps = 7)
        {
            assert!(false, "Quantile is not matched with R");
        }
    }
}

#[test]
fn quantile_length_test() {
    let data = vec![0f64; 7592];
    let q1 = quantile(&data, QType::Type1);
    let q2 = quantile(&data, QType::Type2);
    
    assert!(q1.iter().zip(q2.iter()).all(|(x, y)| *x == *y));
}