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}