1use std::ops::Deref;
2
3use derive_more::Add;
4use derive_more::AddAssign;
5use derive_more::Display;
6use derive_more::From;
7use derive_more::Sub;
8use derive_more::SubAssign;
9
10#[derive(Debug, Clone, Copy, Default)]
31#[derive(PartialEq, Eq, PartialOrd, Ord)]
32#[derive(From)]
33#[derive(Add, AddAssign, Sub, SubAssign)]
34#[derive(Display)]
35#[display("Size({_0})")]
36pub struct Size(pub u64);
37
38impl Deref for Size {
39 type Target = u64;
40
41 fn deref(&self) -> &Self::Target {
42 &self.0
43 }
44}
45
46#[cfg(test)]
47mod tests {
48 use super::Size;
49
50 #[test]
51 fn test_display() {
52 assert_eq!(format!("{:?}", Size(42)), "Size(42)");
53 assert_eq!(format!("{}", Size(42)), "Size(42)");
54 }
55
56 #[allow(clippy::clone_on_copy)]
57 #[test]
58 fn test_calculation() {
59 let mut a = Size(42);
60 let b = Size(10);
61
62 assert_eq!(a + b, Size(52));
65 assert_eq!(a - b, Size(32));
66
67 a += b;
68 assert_eq!(a, Size(52));
69 a -= b;
70 assert_eq!(a, Size(42));
71
72 assert_eq!(a, Size(42));
75 assert!(a > b);
76
77 let c = Size::from(1u64);
80
81 let d = c.clone();
84 assert_eq!(d, c);
85
86 let d = c;
87 assert_eq!(d, c);
88
89 assert_eq!(Size::default(), Size(0));
92
93 assert_eq!(*Size(1u64), 1u64);
96 }
97}