inditech 0.1.0

A set of technical indicators for time series analysis
Documentation
use num_traits::Float;
use std::fmt::Debug;

use crate::{named::Named, slider::Slider};

#[derive(Debug)]
pub struct Identity<F> {
    last: Option<F>,
}

impl<F> Identity<F>
where
    F: Float,
{
    pub fn new() -> Self {
        Self { last: None }
    }
}

impl<F> Slider<F> for Identity<F>
where
    F: Float + Debug,
{
    fn last(&self) -> Option<F> {
        self.last
    }

    fn push(&mut self, item: F) {
        self.last = Some(item)
    }
}

impl<F> Named for Identity<F> {
    fn name(&self) -> String {
        "identity".to_owned()
    }
}

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

    #[test]
    fn identity() {
        let mut ident = Identity::new();

        ident.push(1.);
        ident.push(2.);
        ident.push(3.);

        assert_eq!(ident.last(), Some(3.));
    }

    #[test]
    fn identity_empty() {
        let ident: Identity<f32> = Identity::new();

        assert_eq!(ident.last(), None);
    }
}