@@ -128,28 +128,40 @@ fn test_format_int_exp_precision() {
128
128
let big_int: u32 = 314_159_265 ;
129
129
assert_eq ! ( format!( "{big_int:.1e}" ) , format!( "{:.1e}" , f64 :: from( big_int) ) ) ;
130
130
131
- //test adding precision
131
+ // test adding precision
132
132
assert_eq ! ( format!( "{:.10e}" , i8 :: MIN ) , "-1.2800000000e2" ) ;
133
133
assert_eq ! ( format!( "{:.10e}" , i16 :: MIN ) , "-3.2768000000e4" ) ;
134
134
assert_eq ! ( format!( "{:.10e}" , i32 :: MIN ) , "-2.1474836480e9" ) ;
135
135
assert_eq ! ( format!( "{:.20e}" , i64 :: MIN ) , "-9.22337203685477580800e18" ) ;
136
136
assert_eq ! ( format!( "{:.40e}" , i128 :: MIN ) , "-1.7014118346046923173168730371588410572800e38" ) ;
137
137
138
- //test rounding
138
+ // test rounding
139
139
assert_eq ! ( format!( "{:.1e}" , i8 :: MIN ) , "-1.3e2" ) ;
140
140
assert_eq ! ( format!( "{:.1e}" , i16 :: MIN ) , "-3.3e4" ) ;
141
141
assert_eq ! ( format!( "{:.1e}" , i32 :: MIN ) , "-2.1e9" ) ;
142
142
assert_eq ! ( format!( "{:.1e}" , i64 :: MIN ) , "-9.2e18" ) ;
143
143
assert_eq ! ( format!( "{:.1e}" , i128 :: MIN ) , "-1.7e38" ) ;
144
144
145
- //test huge precision
145
+ // test huge precision
146
146
assert_eq ! ( format!( "{:.1000e}" , 1 ) , format!( "1.{}e0" , "0" . repeat( 1000 ) ) ) ;
147
147
//test zero precision
148
148
assert_eq ! ( format!( "{:.0e}" , 1 ) , format!( "1e0" , ) ) ;
149
149
assert_eq ! ( format!( "{:.0e}" , 35 ) , format!( "4e1" , ) ) ;
150
150
151
- //test padding with precision (and sign)
151
+ // test padding with precision (and sign)
152
152
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
+ }
153
165
}
154
166
155
167
#[ test]
0 commit comments