finlib 0.0.10

Quant finance functions implemented in Rust
Documentation
use super::mean;

pub fn covariance(slice: &[f64], slice_two: &[f64]) -> Option<f64>
{
    match slice.len() - slice_two.len() {
        0 => {
            let mean_1 = mean(slice);
            let mean_2 = mean(slice_two);

            Some(slice
                .iter()
                .zip(slice_two
                    .iter()
                )
                .map(|(x, y)| (x - mean_1) * (y - mean_2))
                .sum::<f64>()
            / ((slice.len() - 1) as f64)
            )
        }
        _ => None
    }
}

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

    #[test]
    fn covariance_test() {
        let result = covariance(&[1f64, 2f64, 3f64, 4f64], &[1f64, 2f64, 3f64, 4f64]);
        assert_eq!(result.unwrap(), 1.6666666666666667f64);
    }

    #[test]
    fn covariance_test_break() {
        let result = covariance(&[1f64, 2f64, 3f64, 4f64], &[1f64, 2f64]);
        assert_eq!(result.is_none(), true);
    }
}