1mod unsigned;
2#[allow(unused_imports)]
3pub use unsigned::*;
4
5#[cfg(test)]
6mod tests {
7 use super::*;
8
9 #[test]
10 fn it_works() {
11 let r = unsigned::UnsignedF64::new(2.0);
12 assert!(r.is_some());
13 assert!(f64::from(r.unwrap()) == 2.0);
14
15 let n = unsigned::UnsignedF64::new(-2.0);
16 assert_eq!(n, None);
17 }
18
19 #[test]
20 fn try_from() {
21 let r = unsigned::UnsignedF64::try_from(2.0);
22 assert!(r.is_ok());
23 assert!(f64::from(r.unwrap()) == 2.0);
24
25 let n = unsigned::UnsignedF64::try_from(-2.0);
26 assert!(n.is_err());
27 }
28
29 #[test]
30 fn add() {
31 let r = unsigned::UnsignedF64::new(2.0);
32 assert!(r.is_some());
33 let r = r.unwrap();
34
35 let n = unsigned::UnsignedF64::new(3.0);
36 assert!(n.is_some());
37 let n = n.unwrap();
38
39 let s = r + n;
40 assert!(f64::from(s) == 5.0);
41
42 let s = r + 3.0;
43 assert!(s == 5.0);
44 }
45
46 #[test]
47 fn sub() {
48 let r = unsigned::UnsignedF64::new(2.0);
49 assert!(r.is_some());
50 let r = r.unwrap();
51
52 let n = unsigned::UnsignedF64::new(3.0);
53 assert!(n.is_some());
54 let n = n.unwrap();
55
56 let s = r - n;
57 assert!(s == -1.0);
58
59 let s = r - 3.0;
60 assert!(s == -1.0);
61 }
62
63 #[test]
64 fn negate() {
65 let r = unsigned::UnsignedF64::new(2.0);
66 assert!(r.is_some());
67 let r = r.unwrap();
68
69 let n = -r;
70 assert!(f64::from(n) == -2.0);
71 }
72
73 #[test]
74 fn divide() {
75 let r = unsigned::UnsignedF64::new(2.0);
76 assert!(r.is_some());
77 let r = r.unwrap();
78
79 let n = unsigned::UnsignedF64::new(3.0);
80 assert!(n.is_some());
81 let n = n.unwrap();
82
83 let s = r / n;
84 assert!(f64::from(s) == 2.0 / 3.0);
85
86 let s = r / 3.0;
87 assert!(s == 2.0 / 3.0);
88 }
89
90 #[test]
91 fn test_square() {
92 let r = -2.;
93 let n = unsigned::UnsignedF64::square(r);
94 assert!(f64::from(n) == 4.0);
95 }
96
97 #[test]
98 fn test_neg_zero_issue() {
99 let one: crate::UnsignedF64 = crate::UnsignedF64::new(1.0).unwrap();
100 let neg_zero = crate::UnsignedF64::new(-0.0).unwrap();
101
102 let neg_inf: crate::UnsignedF64 = one / neg_zero;
103 let neg_pi_by_two = neg_inf.atan(); let neg_one = neg_pi_by_two.abs() / neg_pi_by_two;
105
106 println!("neg_one={neg_one}");
107
108 assert!(neg_one >= 0.0);
109 }
110}