@@ -15,8 +15,39 @@ fn test_format_flags() {
1515fn  test_pointer_formats_data_pointer ( )  { 
1616    let  b:  & [ u8 ]  = b"" ; 
1717    let  s:  & str  = "" ; 
18-     assert_eq ! ( format!( "{s:p}" ) ,  format!( "{:p}" ,  s. as_ptr( ) ) ) ; 
19-     assert_eq ! ( format!( "{b:p}" ) ,  format!( "{:p}" ,  b. as_ptr( ) ) ) ; 
18+     assert_eq ! ( format!( "{s:p}" ) ,  format!( "{:p}" ,  s as  * const  _) ) ; 
19+     assert_eq ! ( format!( "{b:p}" ) ,  format!( "{:p}" ,  b as  * const  _) ) ; 
20+ } 
21+ 
22+ #[ test]  
23+ fn  test_fmt_debug_of_raw_pointers ( )  { 
24+     use  core:: fmt:: Debug ; 
25+ 
26+     fn  check_fmt < T :  Debug > ( t :  T ,  expected :  & str )  { 
27+         use  std:: sync:: LazyLock ; 
28+ 
29+         use  regex:: Regex ; 
30+ 
31+         static  ADDR_REGEX :  LazyLock < Regex >  =
32+             LazyLock :: new ( || Regex :: new ( r"0x[0-9a-fA-F]+" ) . unwrap ( ) ) ; 
33+ 
34+         let  formatted = format ! ( "{:?}" ,  t) ; 
35+         let  normalized = ADDR_REGEX . replace_all ( & formatted,  "$$HEX" ) ; 
36+ 
37+         assert_eq ! ( normalized,  expected) ; 
38+     } 
39+ 
40+     let  plain = & mut  100 ; 
41+     check_fmt ( plain as  * mut  i32 ,  "$HEX" ) ; 
42+     check_fmt ( plain as  * const  i32 ,  "$HEX" ) ; 
43+ 
44+     let  slice = & mut  [ 200 ,  300 ,  400 ] [ ..] ; 
45+     check_fmt ( slice as  * mut  [ i32 ] ,  "Pointer { addr: $HEX, metadata: 3 }" ) ; 
46+     check_fmt ( slice as  * const  [ i32 ] ,  "Pointer { addr: $HEX, metadata: 3 }" ) ; 
47+ 
48+     let  vtable = & mut  500  as  & mut  dyn  Debug ; 
49+     check_fmt ( vtable as  * mut  dyn  Debug ,  "Pointer { addr: $HEX, metadata: DynMetadata($HEX) }" ) ; 
50+     check_fmt ( vtable as  * const  dyn  Debug ,  "Pointer { addr: $HEX, metadata: DynMetadata($HEX) }" ) ; 
2051} 
2152
2253#[ test]  
0 commit comments