traquer 0.7.0

technical analysis library
Documentation
use serde::{Deserialize, Serialize};
use std::fs;

#[derive(Deserialize, Serialize, Debug)]
pub struct SecStats {
    pub high: Vec<f64>,
    pub low: Vec<f64>,
    pub open: Vec<f64>,
    pub close: Vec<f64>,
    pub volume: Vec<u64>,
}

pub fn test_data() -> SecStats {
    test_data_path("./tests/rddt.input")
}

pub fn test_data_path(path: &str) -> SecStats {
    let data = fs::read_to_string(path).expect("Unable to read file");
    let stats: SecStats = serde_json::from_str(&data).expect("JSON does not have correct format.");
    stats
}

#[allow(dead_code)]
pub fn vec_eq(v1: &[f64], v2: &[f64]) -> bool {
    ((v1.len() == v2.len())
        && v1
            .iter()
            .zip(v2)
            .all(|(x, y)| (x.is_nan() && y.is_nan()) || (x == y)))
        || panic!(
            "assertion `left == right` failed\n left: {:?},\n right: {:?}",
            v1, v2
        )
}

#[allow(dead_code)]
pub fn vec_close(v1: &[f64], v2: &[f64]) -> bool {
    ((v1.len() == v2.len())
        && v1
            .iter()
            .zip(v2)
            .all(|(x, y)| (x.is_nan() && y.is_nan()) || ((x - y).abs() < 1e-8)))
        || panic!(
            "assertion `left == right` failed\n left: {:?},\n right: {:?}",
            v1, v2
        )
}