1use 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}