rateslib/dual/dual_ops/
zero.rs1use crate::dual::dual::{Dual, Dual2};
2use crate::dual::enums::Number;
3use num_traits::Zero;
4
5impl Zero for Dual {
6 fn zero() -> Dual {
7 Dual::new(0.0, Vec::new())
8 }
9
10 fn is_zero(&self) -> bool {
11 *self == Dual::new(0.0, Vec::new())
12 }
13}
14
15impl Zero for Dual2 {
16 fn zero() -> Dual2 {
17 Dual2::new(0.0, Vec::new())
18 }
19
20 fn is_zero(&self) -> bool {
21 *self == Dual2::new(0.0, Vec::new())
22 }
23}
24
25impl Zero for Number {
26 fn zero() -> Number {
27 Number::F64(0.0_f64)
28 }
29
30 fn is_zero(&self) -> bool {
31 match self {
32 Number::F64(f) => *f == 0.0_f64,
33 Number::Dual(d) => *d == Dual::new(0.0, vec![]),
34 Number::Dual2(d) => *d == Dual2::new(0.0, vec![]),
35 }
36 }
37}
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42
43 #[test]
44 fn is_zero_() {
45 assert!(Dual::zero().is_zero())
46 }
47
48 #[test]
49 fn is_zero2() {
50 let d = Dual2::zero();
51 assert!(d.is_zero());
52 }
53
54 #[test]
55 fn is_zero_enum() {
56 let d = Number::Dual2(Dual2::zero());
57 assert!(d.is_zero());
58 }
59}