|
60 | 60 | /// assert_eq!(BoundPair::new(2.0, 2.0), None);
|
61 | 61 | /// ```
|
62 | 62 | pub fn new(left: T, right: T) -> Option<BoundPair<T>> {
|
63 |
| - if left >= right { |
64 |
| - None |
65 |
| - } else { |
66 |
| - Some(BoundPair { left, right }) |
| 63 | + match left.partial_cmp(&right) { |
| 64 | + Some(std::cmp::Ordering::Less) => Some(BoundPair { left, right }), |
| 65 | + _ => None, |
67 | 66 | }
|
68 | 67 | }
|
69 | 68 |
|
|
99 | 98 | &self.right
|
100 | 99 | }
|
101 | 100 | }
|
| 101 | + |
| 102 | +#[cfg(test)] |
| 103 | +mod tests { |
| 104 | + use super::*; |
| 105 | + |
| 106 | + #[test] |
| 107 | + fn test_valid_creation() { |
| 108 | + assert!(BoundPair::new(1, 2).is_some()); |
| 109 | + assert!(BoundPair::new(-1.0, 1.0).is_some()); |
| 110 | + assert!(BoundPair::new(0u32, 100u32).is_some()); |
| 111 | + } |
| 112 | + |
| 113 | + #[test] |
| 114 | + fn test_invalid_creation() { |
| 115 | + assert!(BoundPair::new(2, 1).is_none()); |
| 116 | + assert!(BoundPair::new(1.0, 1.0).is_none()); |
| 117 | + assert!(BoundPair::new(100u32, 50u32).is_none()); |
| 118 | + } |
| 119 | + |
| 120 | + #[test] |
| 121 | + fn test_accessors() { |
| 122 | + let bp = BoundPair::new(1.5, 2.5).unwrap(); |
| 123 | + assert_eq!(*bp.left(), 1.5); |
| 124 | + assert_eq!(*bp.right(), 2.5); |
| 125 | + } |
| 126 | + |
| 127 | + #[test] |
| 128 | + fn test_floating_point() { |
| 129 | + assert!(BoundPair::new(f64::NEG_INFINITY, f64::INFINITY).is_some()); |
| 130 | + assert!(BoundPair::new(f64::NAN, 1.0).is_none()); |
| 131 | + assert!(BoundPair::new(1.0, f64::NAN).is_none()); |
| 132 | + } |
| 133 | + |
| 134 | + #[test] |
| 135 | + fn test_copy() { |
| 136 | + let bp1 = BoundPair::new(1, 2).unwrap(); |
| 137 | + let bp2 = bp1; |
| 138 | + assert_eq!(bp1, bp2); |
| 139 | + } |
| 140 | + |
| 141 | + #[cfg(feature = "serde")] |
| 142 | + mod serde_tests { |
| 143 | + use super::*; |
| 144 | + use serde_json; |
| 145 | + |
| 146 | + #[test] |
| 147 | + fn test_serialize() { |
| 148 | + let bp = BoundPair::new(1, 2).unwrap(); |
| 149 | + let serialized = serde_json::to_string(&bp).unwrap(); |
| 150 | + assert_eq!(serialized, r#"{"left":1,"right":2}"#); |
| 151 | + } |
| 152 | + |
| 153 | + #[test] |
| 154 | + fn test_deserialize() { |
| 155 | + let json = r#"{"left":1,"right":2}"#; |
| 156 | + let bp: BoundPair<i32> = serde_json::from_str(json).unwrap(); |
| 157 | + assert_eq!(*bp.left(), 1); |
| 158 | + assert_eq!(*bp.right(), 2); |
| 159 | + } |
| 160 | + |
| 161 | + #[test] |
| 162 | + fn test_roundtrip() { |
| 163 | + let bp1 = BoundPair::new(1.5, 2.5).unwrap(); |
| 164 | + let serialized = serde_json::to_string(&bp1).unwrap(); |
| 165 | + let bp2: BoundPair<f64> = serde_json::from_str(&serialized).unwrap(); |
| 166 | + assert_eq!(bp1, bp2); |
| 167 | + } |
| 168 | + } |
| 169 | +} |
0 commit comments