2015-03-07 05:16:44 +00:00
|
|
|
mod builders;
|
2015-10-15 19:07:20 +00:00
|
|
|
mod float;
|
|
|
|
mod num;
|
2014-08-25 13:31:42 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_format_flags() {
|
|
|
|
// No residual flags left by pointer formatting
|
|
|
|
let p = "".as_ptr();
|
2022-02-12 19:16:17 +00:00
|
|
|
assert_eq!(format!("{:p} {:x}", p, 16), format!("{p:p} 10"));
|
2015-07-01 02:26:03 +00:00
|
|
|
|
|
|
|
assert_eq!(format!("{: >3}", 'a'), " a");
|
2014-08-25 13:31:42 +00:00
|
|
|
}
|
2016-02-07 22:57:01 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_pointer_formats_data_pointer() {
|
|
|
|
let b: &[u8] = b"";
|
|
|
|
let s: &str = "";
|
2022-02-12 19:16:17 +00:00
|
|
|
assert_eq!(format!("{s:p}"), format!("{:p}", s.as_ptr()));
|
|
|
|
assert_eq!(format!("{b:p}"), format!("{:p}", b.as_ptr()));
|
2016-02-07 22:57:01 +00:00
|
|
|
}
|
2017-01-27 03:51:24 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_estimated_capacity() {
|
2017-02-01 22:47:03 +00:00
|
|
|
assert_eq!(format_args!("").estimated_capacity(), 0);
|
2024-01-11 12:04:48 +00:00
|
|
|
assert_eq!(format_args!("{}", { "" }).estimated_capacity(), 0);
|
2017-01-27 03:51:24 +00:00
|
|
|
assert_eq!(format_args!("Hello").estimated_capacity(), 5);
|
2024-01-11 12:04:48 +00:00
|
|
|
assert_eq!(format_args!("Hello, {}!", { "" }).estimated_capacity(), 16);
|
|
|
|
assert_eq!(format_args!("{}, hello!", { "World" }).estimated_capacity(), 0);
|
|
|
|
assert_eq!(format_args!("{}. 16-bytes piece", { "World" }).estimated_capacity(), 32);
|
2017-01-27 03:51:24 +00:00
|
|
|
}
|
2020-01-01 19:43:24 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn pad_integral_resets() {
|
|
|
|
struct Bar;
|
|
|
|
|
|
|
|
impl core::fmt::Display for Bar {
|
|
|
|
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
|
|
|
|
"1".fmt(f)?;
|
|
|
|
f.pad_integral(true, "", "5")?;
|
|
|
|
"1".fmt(f)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-02-12 19:16:17 +00:00
|
|
|
assert_eq!(format!("{Bar:<03}"), "1 0051 ");
|
2020-01-01 19:43:24 +00:00
|
|
|
}
|
Shorten the `MaybeUninit` `Debug` implementation
Currently the `Debug` implementation for `MaybeUninit` winds up being
pretty verbose. This struct:
#[derive(Debug)]
pub struct Foo {
pub a: u32,
pub b: &'static str,
pub c: MaybeUninit<u32>,
pub d: MaybeUninit<String>,
}
Prints as:
Foo {
a: 0,
b: "hello",
c: core::mem::maybe_uninit::MaybeUninit<u32>,
d: core::mem::maybe_uninit::MaybeUninit<alloc::string::String>,
}
The goal is just to be a standin for content so the path prefix doesn't
add any useful information. Change the implementation to trim
`MaybeUninit`'s leading path, meaning the new result is now:
Foo {
a: 0,
b: "hello",
c: MaybeUninit<u32>,
d: MaybeUninit<alloc::string::String>,
}
2024-11-21 08:46:59 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_maybe_uninit_short() {
|
|
|
|
// Ensure that the trimmed `MaybeUninit` Debug implementation doesn't break
|
|
|
|
let x = core::mem::MaybeUninit::new(0u32);
|
|
|
|
assert_eq!(format!("{x:?}"), "MaybeUninit<u32>");
|
|
|
|
}
|
2023-11-22 00:52:13 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn formatting_options_flags() {
|
|
|
|
use core::fmt::*;
|
|
|
|
for sign in [None, Some(Sign::Plus), Some(Sign::Minus)] {
|
|
|
|
for alternate in [true, false] {
|
|
|
|
for sign_aware_zero_pad in [true, false] {
|
|
|
|
for debug_as_hex in [None, Some(DebugAsHex::Lower), Some(DebugAsHex::Upper)] {
|
2024-02-16 02:42:03 +00:00
|
|
|
let mut formatting_options = FormattingOptions::new();
|
|
|
|
formatting_options
|
2023-11-22 00:52:13 +00:00
|
|
|
.sign(sign)
|
|
|
|
.sign_aware_zero_pad(sign_aware_zero_pad)
|
|
|
|
.alternate(alternate)
|
|
|
|
.debug_as_hex(debug_as_hex);
|
|
|
|
|
2024-02-16 02:42:03 +00:00
|
|
|
assert_eq!(formatting_options.get_sign(), sign);
|
|
|
|
assert_eq!(formatting_options.get_alternate(), alternate);
|
|
|
|
assert_eq!(formatting_options.get_sign_aware_zero_pad(), sign_aware_zero_pad);
|
|
|
|
assert_eq!(formatting_options.get_debug_as_hex(), debug_as_hex);
|
2023-11-22 00:52:13 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|