| use core::fmt::NumBuffer; |
| use std::str::FromStr; |
| |
| macro_rules! assert_nb { |
| ($int:ident, $value:expr) => { |
| let value: $int = $value; |
| let s = value.to_string(); |
| let s2 = format!("s: {}.", value); |
| |
| assert_eq!(format!("s: {s}."), s2); |
| let Ok(ret) = $int::from_str(&s) else { |
| panic!("failed to convert into to string"); |
| }; |
| assert_eq!(ret, value); |
| |
| let mut buffer = NumBuffer::<$int>::new(); |
| assert_eq!(value.format_into(&mut buffer), s.as_str()); |
| }; |
| } |
| |
| macro_rules! uint_to_s { |
| ($($fn_name:ident, $int:ident,)+) => { |
| $( |
| #[test] |
| fn $fn_name() { |
| assert_nb!($int, $int::MIN); |
| assert_nb!($int, $int::MAX); |
| assert_nb!($int, 1); |
| assert_nb!($int, $int::MIN / 2); |
| assert_nb!($int, $int::MAX / 2); |
| } |
| )+ |
| } |
| } |
| macro_rules! int_to_s { |
| ($($fn_name:ident, $int:ident,)+) => { |
| $( |
| #[test] |
| fn $fn_name() { |
| assert_nb!($int, $int::MIN); |
| assert_nb!($int, $int::MAX); |
| assert_nb!($int, 1); |
| assert_nb!($int, 0); |
| assert_nb!($int, -1); |
| assert_nb!($int, $int::MIN / 2); |
| assert_nb!($int, $int::MAX / 2); |
| } |
| )+ |
| } |
| } |
| |
| int_to_s!( |
| test_i8_to_string, |
| i8, |
| test_i16_to_string, |
| i16, |
| test_i32_to_string, |
| i32, |
| test_i64_to_string, |
| i64, |
| test_isize_to_string, |
| isize, |
| test_i128_to_string, |
| i128, |
| ); |
| uint_to_s!( |
| test_u8_to_string, |
| u8, |
| test_u16_to_string, |
| u16, |
| test_u32_to_string, |
| u32, |
| test_u64_to_string, |
| u64, |
| test_usize_to_string, |
| usize, |
| test_u128_to_string, |
| u128, |
| ); |