bit_int/bit_uint/
fmt.rs

1// SPDX-FileCopyrightText: 2024 Shun Sakai
2//
3// SPDX-License-Identifier: Apache-2.0 OR MIT
4
5//! Utilities for formatting and printing [`BitUint`].
6
7use core::fmt;
8
9use num_traits::{PrimInt, Unsigned};
10
11use super::BitUint;
12
13macro_rules! impl_fmt {
14    ($trait:ident) => {
15        impl<T: Unsigned + PrimInt + fmt::$trait, const N: u32> fmt::$trait for BitUint<T, N> {
16            #[inline]
17            fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18                self.get().fmt(f)
19            }
20        }
21    };
22}
23impl_fmt!(Display);
24impl_fmt!(Octal);
25impl_fmt!(LowerHex);
26impl_fmt!(UpperHex);
27impl_fmt!(Binary);
28impl_fmt!(LowerExp);
29impl_fmt!(UpperExp);
30
31#[cfg(test)]
32mod tests {
33    use super::super::BitU8;
34
35    #[test]
36    fn debug() {
37        assert_eq!(format!("{:?}", BitU8::<7>::MIN), "BitUint(0)");
38        assert_eq!(format!("{:?}", BitU8::<7>::MAX), "BitUint(127)");
39    }
40
41    #[test]
42    fn display() {
43        assert_eq!(format!("{}", BitU8::<7>::MIN), "0");
44        assert_eq!(format!("{}", BitU8::<7>::MAX), "127");
45    }
46
47    #[test]
48    fn octal() {
49        assert_eq!(format!("{:o}", BitU8::<7>::MIN), "0");
50        assert_eq!(format!("{:#o}", BitU8::<7>::MAX), "0o177");
51    }
52
53    #[test]
54    fn lower_hex() {
55        assert_eq!(format!("{:x}", BitU8::<7>::MIN), "0");
56        assert_eq!(format!("{:#x}", BitU8::<7>::MAX), "0x7f");
57    }
58
59    #[test]
60    fn upper_hex() {
61        assert_eq!(format!("{:X}", BitU8::<7>::MIN), "0");
62        assert_eq!(format!("{:#X}", BitU8::<7>::MAX), "0x7F");
63    }
64
65    #[test]
66    fn binary() {
67        assert_eq!(format!("{:b}", BitU8::<7>::MIN), "0");
68        assert_eq!(format!("{:#b}", BitU8::<7>::MAX), "0b1111111");
69    }
70
71    #[test]
72    fn lower_exp() {
73        assert_eq!(format!("{:e}", BitU8::<7>::MIN), "0e0");
74        assert_eq!(format!("{:e}", BitU8::<7>::MAX), "1.27e2");
75    }
76
77    #[test]
78    fn upper_exp() {
79        assert_eq!(format!("{:E}", BitU8::<7>::MIN), "0E0");
80        assert_eq!(format!("{:E}", BitU8::<7>::MAX), "1.27E2");
81    }
82}