| use minimal_lexical::number::Number; |
| |
| #[test] |
| fn is_fast_path_test() { |
| let mut number = Number { |
| exponent: -4, |
| mantissa: 12345, |
| many_digits: false, |
| }; |
| assert_eq!(number.is_fast_path::<f32>(), true); |
| assert_eq!(number.is_fast_path::<f64>(), true); |
| |
| number.exponent = -15; |
| assert_eq!(number.is_fast_path::<f32>(), false); |
| assert_eq!(number.is_fast_path::<f64>(), true); |
| |
| number.exponent = -25; |
| assert_eq!(number.is_fast_path::<f32>(), false); |
| assert_eq!(number.is_fast_path::<f64>(), false); |
| |
| number.exponent = 25; |
| assert_eq!(number.is_fast_path::<f32>(), false); |
| assert_eq!(number.is_fast_path::<f64>(), true); |
| |
| number.exponent = 36; |
| assert_eq!(number.is_fast_path::<f32>(), false); |
| assert_eq!(number.is_fast_path::<f64>(), true); |
| |
| number.exponent = 38; |
| assert_eq!(number.is_fast_path::<f32>(), false); |
| assert_eq!(number.is_fast_path::<f64>(), false); |
| |
| number.mantissa = 1 << 25; |
| number.exponent = 0; |
| assert_eq!(number.is_fast_path::<f32>(), false); |
| assert_eq!(number.is_fast_path::<f64>(), true); |
| |
| number.mantissa = 1 << 54; |
| assert_eq!(number.is_fast_path::<f32>(), false); |
| assert_eq!(number.is_fast_path::<f64>(), false); |
| |
| number.mantissa = 1 << 52; |
| assert_eq!(number.is_fast_path::<f32>(), false); |
| assert_eq!(number.is_fast_path::<f64>(), true); |
| |
| number.many_digits = true; |
| assert_eq!(number.is_fast_path::<f32>(), false); |
| assert_eq!(number.is_fast_path::<f64>(), false); |
| } |
| |
| #[test] |
| fn try_fast_path_test() { |
| let mut number = Number { |
| exponent: -4, |
| mantissa: 12345, |
| many_digits: false, |
| }; |
| assert_eq!(number.try_fast_path::<f32>(), Some(1.2345)); |
| assert_eq!(number.try_fast_path::<f64>(), Some(1.2345)); |
| |
| number.exponent = -10; |
| assert_eq!(number.try_fast_path::<f32>(), Some(1.2345e-6)); |
| assert_eq!(number.try_fast_path::<f64>(), Some(1.2345e-6)); |
| |
| number.exponent = -20; |
| assert_eq!(number.try_fast_path::<f32>(), None); |
| assert_eq!(number.try_fast_path::<f64>(), Some(1.2345e-16)); |
| |
| number.exponent = -25; |
| assert_eq!(number.try_fast_path::<f32>(), None); |
| assert_eq!(number.try_fast_path::<f64>(), None); |
| |
| number.exponent = 12; |
| assert_eq!(number.try_fast_path::<f32>(), Some(1.2345e16)); |
| assert_eq!(number.try_fast_path::<f64>(), Some(1.2345e16)); |
| |
| number.exponent = 25; |
| assert_eq!(number.try_fast_path::<f32>(), None); |
| assert_eq!(number.try_fast_path::<f64>(), Some(1.2345e29)); |
| |
| number.exponent = 32; |
| assert_eq!(number.try_fast_path::<f32>(), None); |
| assert_eq!(number.try_fast_path::<f64>(), Some(1.2345e36)); |
| |
| number.exponent = 36; |
| assert_eq!(number.try_fast_path::<f32>(), None); |
| assert_eq!(number.try_fast_path::<f64>(), None); |
| } |