equal
deleted
inserted
replaced
125 } |
125 } |
126 |
126 |
127 impl Ord for FPNum { |
127 impl Ord for FPNum { |
128 #[inline] |
128 #[inline] |
129 fn cmp(&self, rhs: &Self) -> cmp::Ordering { |
129 fn cmp(&self, rhs: &Self) -> cmp::Ordering { |
130 if self.value == 0 && rhs.value == 0 { |
130 #[inline] |
131 cmp::Ordering::Equal |
131 fn extend(n: &FPNum) -> i128 { |
132 } else if self.is_negative != rhs.is_negative { |
132 if n.is_negative { |
133 if self.is_negative { |
133 -(n.value as i128) |
134 cmp::Ordering::Less |
|
135 } else { |
134 } else { |
136 cmp::Ordering::Greater |
135 n.value as i128 |
137 } |
136 } |
138 } else if self.value == rhs.value { |
137 } |
139 cmp::Ordering::Equal |
138 extend(self).cmp(&(extend(rhs))) |
140 } else if self.is_negative { |
|
141 if self.value > rhs.value { |
|
142 cmp::Ordering::Less |
|
143 } else { |
|
144 cmp::Ordering::Greater |
|
145 } |
|
146 } else { |
|
147 if self.value < rhs.value { |
|
148 cmp::Ordering::Less |
|
149 } else { |
|
150 cmp::Ordering::Greater |
|
151 } |
|
152 } |
|
153 } |
139 } |
154 } |
140 } |
155 |
141 |
156 impl ops::Add for FPNum { |
142 impl ops::Add for FPNum { |
157 type Output = Self; |
143 type Output = Self; |
312 assert_eq!(n - n, z); |
298 assert_eq!(n - n, z); |
313 assert_eq!(-n + n, z); |
299 assert_eq!(-n + n, z); |
314 } |
300 } |
315 |
301 |
316 #[test] |
302 #[test] |
|
303 fn ord() { |
|
304 let z = FPNum::from(0);; |
|
305 let n1_5 = FPNum::new(3, 2); |
|
306 let n2_25 = FPNum::new(9, 4); |
|
307 |
|
308 assert!(!(z > z)); |
|
309 assert!(!(z < z)); |
|
310 assert!(n2_25 > n1_5); |
|
311 assert!(-n2_25 < n1_5); |
|
312 assert!(-n2_25 < -n1_5); |
|
313 } |
|
314 |
|
315 #[test] |
317 fn arith() { |
316 fn arith() { |
318 let n1_5 = FPNum::new(3, 2); |
317 let n1_5 = FPNum::new(3, 2); |
319 let n2_25 = FPNum::new(9, 4); |
318 let n2_25 = FPNum::new(9, 4); |
320 let n_0_15 = FPNum::new(-15, 100); |
319 let n_0_15 = FPNum::new(-15, 100); |
321 |
320 |