inditech/indicators/
identity.rs1use 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}