inditech/indicators/
identity.rs

1use num_traits::Float;
2use std::fmt::Debug;
3
4use crate::{named::Named, slider::Slider};
5
6#[derive(Debug)]
7pub struct Identity<F> {
8    last: Option<F>,
9}
10
11impl<F> Identity<F>
12where
13    F: Float,
14{
15    pub fn new() -> Self {
16        Self { last: None }
17    }
18}
19
20impl<F> Slider<F> for Identity<F>
21where
22    F: Float + Debug,
23{
24    fn last(&self) -> Option<F> {
25        self.last
26    }
27
28    fn push(&mut self, item: F) {
29        self.last = Some(item)
30    }
31}
32
33impl<F> Named for Identity<F> {
34    fn name(&self) -> String {
35        "identity".to_owned()
36    }
37}
38
39#[cfg(test)]
40mod tests {
41    use super::*;
42
43    #[test]
44    fn identity() {
45        let mut ident = Identity::new();
46
47        ident.push(1.);
48        ident.push(2.);
49        ident.push(3.);
50
51        assert_eq!(ident.last(), Some(3.));
52    }
53
54    #[test]
55    fn identity_empty() {
56        let ident: Identity<f32> = Identity::new();
57
58        assert_eq!(ident.last(), None);
59    }
60}