1use minimal_lexical::extended_float::ExtendedFloat; 2use minimal_lexical::rounding; 3 4#[test] 5fn round_test() { 6 let mut fp = ExtendedFloat { 7 mant: 9223372036854776832, 8 exp: -10, 9 }; 10 rounding::round::<f64, _>(&mut fp, |f, s| { 11 f.mant >>= s; 12 f.exp += s; 13 }); 14 assert_eq!(fp.mant, 0); 15 assert_eq!(fp.exp, 1); 16 17 let mut fp = ExtendedFloat { 18 mant: 9223372036854776832, 19 exp: -10, 20 }; 21 rounding::round::<f64, _>(&mut fp, |f, s| { 22 f.mant >>= s; 23 f.exp += s; 24 // Round-up. 25 f.mant += 1; 26 }); 27 assert_eq!(fp.mant, 1); 28 assert_eq!(fp.exp, 1); 29 30 // Round-down 31 let mut fp = ExtendedFloat { 32 mant: 9223372036854776832, 33 exp: -10, 34 }; 35 rounding::round::<f64, _>(&mut fp, |f, s| { 36 rounding::round_nearest_tie_even(f, s, |is_odd, is_halfway, is_above| { 37 is_above || (is_odd && is_halfway) 38 }); 39 }); 40 assert_eq!(fp.mant, 0); 41 assert_eq!(fp.exp, 1); 42 43 // Round up 44 let mut fp = ExtendedFloat { 45 mant: 9223372036854778880, 46 exp: -10, 47 }; 48 rounding::round::<f64, _>(&mut fp, |f, s| { 49 rounding::round_nearest_tie_even(f, s, |is_odd, is_halfway, is_above| { 50 is_above || (is_odd && is_halfway) 51 }); 52 }); 53 assert_eq!(fp.mant, 2); 54 assert_eq!(fp.exp, 1); 55 56 // Round down 57 let mut fp = ExtendedFloat { 58 mant: 9223372036854778880, 59 exp: -10, 60 }; 61 rounding::round::<f64, _>(&mut fp, rounding::round_down); 62 assert_eq!(fp.mant, 1); 63 assert_eq!(fp.exp, 1); 64} 65