mirror of
https://github.com/rust-lang/rust.git
synced 2025-09-28 13:46:03 +00:00
80 lines
1.8 KiB
Rust
80 lines
1.8 KiB
Rust
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,
|
|
);
|