klirr_core/models/
quantity.rs1use crate::prelude::*;
2
3#[derive(
5 Clone,
6 Copy,
7 Display,
8 Debug,
9 PartialEq,
10 Eq,
11 Hash,
12 Serialize,
13 Deserialize,
14 From,
15 Deref,
16 PartialOrd,
17 derive_more::Add,
18 derive_more::AddAssign,
19 derive_more::Sub,
20 derive_more::Mul,
21)]
22#[from(forward)]
23#[deref(forward)]
24pub struct Quantity(Decimal);
25impl Quantity {
26 pub const ZERO: Self = Self(Decimal::ZERO);
27 pub const ONE: Self = Self(Decimal::ONE);
28 pub const TWO: Self = Self(Decimal::TWO);
29 pub const EIGHT: Self = Self(Decimal::EIGHT);
30}
31
32impl HasSample for Quantity {
33 fn sample() -> Self {
34 Self::ONE
35 }
36 fn sample_other() -> Self {
37 Self::from(dec!(3.5)) }
39}
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44 use test_log::test;
45
46 type Sut = Quantity;
47
48 #[test]
49 fn equality() {
50 assert_eq!(Sut::sample(), Sut::sample());
51 assert_eq!(Sut::sample_other(), Sut::sample_other());
52 }
53
54 #[test]
55 fn inequality() {
56 assert_ne!(Sut::sample(), Sut::sample_other());
57 }
58
59 #[test]
60 fn quantity_sample() {
61 let sample = Quantity::sample();
62 assert_eq!(sample, Quantity::ONE);
63 }
64
65 #[test]
66 fn quantity_display() {
67 let quantity = Quantity::from(dec!(3.5));
68 assert_eq!(format!("{}", quantity), "3.5");
69 }
70}