@@ -128,28 +128,40 @@ fn test_format_int_exp_precision() {
128128 let big_int: u32 = 314_159_265 ;
129129 assert_eq ! ( format!( "{big_int:.1e}" ) , format!( "{:.1e}" , f64 :: from( big_int) ) ) ;
130130
131- //test adding precision
131+ // test adding precision
132132 assert_eq ! ( format!( "{:.10e}" , i8 :: MIN ) , "-1.2800000000e2" ) ;
133133 assert_eq ! ( format!( "{:.10e}" , i16 :: MIN ) , "-3.2768000000e4" ) ;
134134 assert_eq ! ( format!( "{:.10e}" , i32 :: MIN ) , "-2.1474836480e9" ) ;
135135 assert_eq ! ( format!( "{:.20e}" , i64 :: MIN ) , "-9.22337203685477580800e18" ) ;
136136 assert_eq ! ( format!( "{:.40e}" , i128 :: MIN ) , "-1.7014118346046923173168730371588410572800e38" ) ;
137137
138- //test rounding
138+ // test rounding
139139 assert_eq ! ( format!( "{:.1e}" , i8 :: MIN ) , "-1.3e2" ) ;
140140 assert_eq ! ( format!( "{:.1e}" , i16 :: MIN ) , "-3.3e4" ) ;
141141 assert_eq ! ( format!( "{:.1e}" , i32 :: MIN ) , "-2.1e9" ) ;
142142 assert_eq ! ( format!( "{:.1e}" , i64 :: MIN ) , "-9.2e18" ) ;
143143 assert_eq ! ( format!( "{:.1e}" , i128 :: MIN ) , "-1.7e38" ) ;
144144
145- //test huge precision
145+ // test huge precision
146146 assert_eq ! ( format!( "{:.1000e}" , 1 ) , format!( "1.{}e0" , "0" . repeat( 1000 ) ) ) ;
147147 //test zero precision
148148 assert_eq ! ( format!( "{:.0e}" , 1 ) , format!( "1e0" , ) ) ;
149149 assert_eq ! ( format!( "{:.0e}" , 35 ) , format!( "4e1" , ) ) ;
150150
151- //test padding with precision (and sign)
151+ // test padding with precision (and sign)
152152 assert_eq ! ( format!( "{:+10.3e}" , 1 ) , " +1.000e0" ) ;
153+
154+ // test precision remains correct when rounding to next power
155+
156+ for i in i16:: MIN ..=i16:: MAX {
157+ for p in 0 ..=5 {
158+ assert_eq ! (
159+ format!( "{i:.p$e}" ) ,
160+ format!( "{:.p$e}" , f32 :: from( i) ) ,
161+ "integer {i} at precision {p}"
162+ ) ;
163+ }
164+ }
153165}
154166
155167#[ test]
0 commit comments