1use minimal_lexical::number::Number; 2 3#[test] 4fn is_fast_path_test() { 5 let mut number = Number { 6 exponent: -4, 7 mantissa: 12345, 8 many_digits: false, 9 }; 10 assert_eq!(number.is_fast_path::<f32>(), true); 11 assert_eq!(number.is_fast_path::<f64>(), true); 12 13 number.exponent = -15; 14 assert_eq!(number.is_fast_path::<f32>(), false); 15 assert_eq!(number.is_fast_path::<f64>(), true); 16 17 number.exponent = -25; 18 assert_eq!(number.is_fast_path::<f32>(), false); 19 assert_eq!(number.is_fast_path::<f64>(), false); 20 21 number.exponent = 25; 22 assert_eq!(number.is_fast_path::<f32>(), false); 23 assert_eq!(number.is_fast_path::<f64>(), true); 24 25 number.exponent = 36; 26 assert_eq!(number.is_fast_path::<f32>(), false); 27 assert_eq!(number.is_fast_path::<f64>(), true); 28 29 number.exponent = 38; 30 assert_eq!(number.is_fast_path::<f32>(), false); 31 assert_eq!(number.is_fast_path::<f64>(), false); 32 33 number.mantissa = 1 << 25; 34 number.exponent = 0; 35 assert_eq!(number.is_fast_path::<f32>(), false); 36 assert_eq!(number.is_fast_path::<f64>(), true); 37 38 number.mantissa = 1 << 54; 39 assert_eq!(number.is_fast_path::<f32>(), false); 40 assert_eq!(number.is_fast_path::<f64>(), false); 41 42 number.mantissa = 1 << 52; 43 assert_eq!(number.is_fast_path::<f32>(), false); 44 assert_eq!(number.is_fast_path::<f64>(), true); 45 46 number.many_digits = true; 47 assert_eq!(number.is_fast_path::<f32>(), false); 48 assert_eq!(number.is_fast_path::<f64>(), false); 49} 50 51#[test] 52fn try_fast_path_test() { 53 let mut number = Number { 54 exponent: -4, 55 mantissa: 12345, 56 many_digits: false, 57 }; 58 assert_eq!(number.try_fast_path::<f32>(), Some(1.2345)); 59 assert_eq!(number.try_fast_path::<f64>(), Some(1.2345)); 60 61 number.exponent = -10; 62 assert_eq!(number.try_fast_path::<f32>(), Some(1.2345e-6)); 63 assert_eq!(number.try_fast_path::<f64>(), Some(1.2345e-6)); 64 65 number.exponent = -20; 66 assert_eq!(number.try_fast_path::<f32>(), None); 67 assert_eq!(number.try_fast_path::<f64>(), Some(1.2345e-16)); 68 69 number.exponent = -25; 70 assert_eq!(number.try_fast_path::<f32>(), None); 71 assert_eq!(number.try_fast_path::<f64>(), None); 72 73 number.exponent = 12; 74 assert_eq!(number.try_fast_path::<f32>(), Some(1.2345e16)); 75 assert_eq!(number.try_fast_path::<f64>(), Some(1.2345e16)); 76 77 number.exponent = 25; 78 assert_eq!(number.try_fast_path::<f32>(), None); 79 assert_eq!(number.try_fast_path::<f64>(), Some(1.2345e29)); 80 81 number.exponent = 32; 82 assert_eq!(number.try_fast_path::<f32>(), None); 83 assert_eq!(number.try_fast_path::<f64>(), Some(1.2345e36)); 84 85 number.exponent = 36; 86 assert_eq!(number.try_fast_path::<f32>(), None); 87 assert_eq!(number.try_fast_path::<f64>(), None); 88} 89