1 use minimal_lexical::extended_float::ExtendedFloat;
2 use minimal_lexical::rounding;
3
4 #[test]
round_test()5 fn 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