rolling_buffer/
lib.rs

1pub mod buffer;
2
3#[cfg(test)]
4mod tests {
5    use crate::buffer::{buffer::RollingBuffer, traits::Rolling};
6    
7    #[test]
8    fn test_rolling_data_underflow() {
9        let mut data = RollingBuffer::<i32>::new(4);
10        data.push(1);
11        data.push(2);
12
13        assert_eq!(*data.raw(), [1, 2, 0, 0]);
14        assert_eq!(*data.to_vec(), [1, 2]);
15        assert_eq!(*data.last().unwrap_or(&0), 2);
16        assert_eq!(*data.first().unwrap_or(&0), 1);
17        assert_eq!(data.size(), 4);
18        assert_eq!(data.count(), 2);
19        assert_eq!(data.last_removed().unwrap(), 0);
20    }
21    
22    #[test]
23    fn test_rolling_data_overflow() {
24        let mut data = RollingBuffer::<i32>::new(4);
25        data.push(1);
26        data.push(2);
27        data.push(3);
28        data.push(4);
29        data.push(5);
30        data.push(6);
31
32        assert_eq!(*data.raw(), [5, 6, 3, 4]);
33        assert_eq!(*data.to_vec(), [3, 4, 5, 6]);
34        assert_eq!(*data.last().unwrap_or(&0), 6);
35        assert_eq!(*data.first().unwrap_or(&0), 3);
36        assert_eq!(data.size(), 4);
37        assert_eq!(data.count(), 6);
38        assert_eq!(data.last_removed().unwrap(), 2);
39        assert_eq!(*data.get(3).unwrap(), 4);
40        assert_eq!(*data.get(4).unwrap(), 5);
41        assert_eq!(*data.get(5).unwrap(), 6);
42    }
43
44    #[test]
45    fn test_as_vec() {
46        let mut data = RollingBuffer::<i32>::new(4);
47        data.push(1);
48        data.push(2);
49        data.push(3);
50        assert_eq!(data.to_vec(), [1, 2, 3]);
51        data.push(4);
52        data.push(5);
53        assert_eq!(data.count(), 5);
54        assert_eq!(data.size(), 4);
55        assert_eq!(data.to_vec(), [2, 3, 4, 5]);
56    }
57
58    #[test]
59    fn test_size_0() {
60        let mut data = RollingBuffer::<i32>::new(0);
61        data.push(1);
62        data.push(2);
63        data.push(3);
64        assert_eq!(data.to_vec(), [1, 2, 3]);
65        data.push(4);
66        data.push(5);
67        assert_eq!(data.count(), 5);
68        assert_eq!(data.size(), 0);
69        assert_eq!(data.to_vec(), [1, 2, 3, 4, 5]);
70    }
71}