Coverage Report

Created: 2026-08-14 08:14

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/fastnum-0.7.4/src/decimal/round.rs
Line
Count
Source
1
use core::cmp::Ordering::{Equal, Greater, Less};
2
3
use crate::decimal::{
4
    RoundingMode::{self, *},
5
    Sign,
6
};
7
8
// TODO: refactor
9
0
pub(crate) fn round_pair_digits(
10
0
    pair: (u8, u8),
11
0
    sign: Sign,
12
0
    rounding_mode: RoundingMode,
13
0
    trailing_zeros: bool,
14
0
) -> u8 {
15
0
    let (lhs, rhs) = pair;
16
    // if all zero after digit, never round
17
0
    if rhs == 0 && trailing_zeros {
18
0
        return lhs;
19
0
    }
20
0
    let up = lhs + 1;
21
0
    let down = lhs;
22
0
    match (rounding_mode, rhs.cmp(&5)) {
23
0
        (No, _) => down,
24
0
        (Up, _) => up,
25
0
        (Down, _) => down,
26
        (Floor, _) => {
27
0
            if sign == Sign::Minus {
28
0
                up
29
            } else {
30
0
                down
31
            }
32
        }
33
        (Ceiling, _) => {
34
0
            if sign == Sign::Minus {
35
0
                down
36
            } else {
37
0
                up
38
            }
39
        }
40
0
        (_, Less) => down,
41
0
        (_, Greater) => up,
42
0
        (_, Equal) if !trailing_zeros => up,
43
0
        (HalfUp, Equal) => up,
44
0
        (HalfDown, Equal) => down,
45
        (HalfEven, Equal) => {
46
0
            if lhs % 2 == 0 {
47
0
                down
48
            } else {
49
0
                up
50
            }
51
        }
52
    }
53
0
}