@@ -38,6 +38,16 @@ fn test_format_int() {
3838 assert_eq ! ( format!( "{:o}" , 1i16 ) , "1" ) ;
3939 assert_eq ! ( format!( "{:o}" , 1i32 ) , "1" ) ;
4040 assert_eq ! ( format!( "{:o}" , 1i64 ) , "1" ) ;
41+ assert_eq ! ( format!( "{:e}" , 1isize ) , "1e0" ) ;
42+ assert_eq ! ( format!( "{:e}" , 1i8 ) , "1e0" ) ;
43+ assert_eq ! ( format!( "{:e}" , 1i16 ) , "1e0" ) ;
44+ assert_eq ! ( format!( "{:e}" , 1i32 ) , "1e0" ) ;
45+ assert_eq ! ( format!( "{:e}" , 1i64 ) , "1e0" ) ;
46+ assert_eq ! ( format!( "{:E}" , 1isize ) , "1E0" ) ;
47+ assert_eq ! ( format!( "{:E}" , 1i8 ) , "1E0" ) ;
48+ assert_eq ! ( format!( "{:E}" , 1i16 ) , "1E0" ) ;
49+ assert_eq ! ( format!( "{:E}" , 1i32 ) , "1E0" ) ;
50+ assert_eq ! ( format!( "{:E}" , 1i64 ) , "1E0" ) ;
4151
4252 assert_eq ! ( format!( "{}" , 1usize ) , "1" ) ;
4353 assert_eq ! ( format!( "{}" , 1u8 ) , "1" ) ;
@@ -69,13 +79,79 @@ fn test_format_int() {
6979 assert_eq ! ( format!( "{:o}" , 1u16 ) , "1" ) ;
7080 assert_eq ! ( format!( "{:o}" , 1u32 ) , "1" ) ;
7181 assert_eq ! ( format!( "{:o}" , 1u64 ) , "1" ) ;
82+ assert_eq ! ( format!( "{:e}" , 1u8 ) , "1e0" ) ;
83+ assert_eq ! ( format!( "{:e}" , 1u16 ) , "1e0" ) ;
84+ assert_eq ! ( format!( "{:e}" , 1u32 ) , "1e0" ) ;
85+ assert_eq ! ( format!( "{:e}" , 1u64 ) , "1e0" ) ;
86+ assert_eq ! ( format!( "{:E}" , 1u8 ) , "1E0" ) ;
87+ assert_eq ! ( format!( "{:E}" , 1u16 ) , "1E0" ) ;
88+ assert_eq ! ( format!( "{:E}" , 1u32 ) , "1E0" ) ;
89+ assert_eq ! ( format!( "{:E}" , 1u64 ) , "1E0" ) ;
7290
7391 // Test a larger number
7492 assert_eq ! ( format!( "{:b}" , 55 ) , "110111" ) ;
7593 assert_eq ! ( format!( "{:o}" , 55 ) , "67" ) ;
7694 assert_eq ! ( format!( "{}" , 55 ) , "55" ) ;
7795 assert_eq ! ( format!( "{:x}" , 55 ) , "37" ) ;
7896 assert_eq ! ( format!( "{:X}" , 55 ) , "37" ) ;
97+ assert_eq ! ( format!( "{:e}" , 55 ) , "5.5e1" ) ;
98+ assert_eq ! ( format!( "{:E}" , 55 ) , "5.5E1" ) ;
99+ assert_eq ! ( format!( "{:e}" , 10000000000u64 ) , "1e10" ) ;
100+ assert_eq ! ( format!( "{:E}" , 10000000000u64 ) , "1E10" ) ;
101+ assert_eq ! ( format!( "{:e}" , 10000000001u64 ) , "1.0000000001e10" ) ;
102+ assert_eq ! ( format!( "{:E}" , 10000000001u64 ) , "1.0000000001E10" ) ;
103+ }
104+
105+ #[ test]
106+ fn test_format_int_exp_limits ( ) {
107+ use core:: { i128, i16, i32, i64, i8, u128, u16, u32, u64, u8} ;
108+ assert_eq ! ( format!( "{:e}" , i8 :: MIN ) , "-1.28e2" ) ;
109+ assert_eq ! ( format!( "{:e}" , i8 :: MAX ) , "1.27e2" ) ;
110+ assert_eq ! ( format!( "{:e}" , i16 :: MIN ) , "-3.2768e4" ) ;
111+ assert_eq ! ( format!( "{:e}" , i16 :: MAX ) , "3.2767e4" ) ;
112+ assert_eq ! ( format!( "{:e}" , i32 :: MIN ) , "-2.147483648e9" ) ;
113+ assert_eq ! ( format!( "{:e}" , i32 :: MAX ) , "2.147483647e9" ) ;
114+ assert_eq ! ( format!( "{:e}" , i64 :: MIN ) , "-9.223372036854775808e18" ) ;
115+ assert_eq ! ( format!( "{:e}" , i64 :: MAX ) , "9.223372036854775807e18" ) ;
116+ assert_eq ! ( format!( "{:e}" , i128 :: MIN ) , "-1.70141183460469231731687303715884105728e38" ) ;
117+ assert_eq ! ( format!( "{:e}" , i128 :: MAX ) , "1.70141183460469231731687303715884105727e38" ) ;
118+
119+ assert_eq ! ( format!( "{:e}" , u8 :: MAX ) , "2.55e2" ) ;
120+ assert_eq ! ( format!( "{:e}" , u16 :: MAX ) , "6.5535e4" ) ;
121+ assert_eq ! ( format!( "{:e}" , u32 :: MAX ) , "4.294967295e9" ) ;
122+ assert_eq ! ( format!( "{:e}" , u64 :: MAX ) , "1.8446744073709551615e19" ) ;
123+ assert_eq ! ( format!( "{:e}" , u128 :: MAX ) , "3.40282366920938463463374607431768211455e38" ) ;
124+ }
125+
126+ #[ test]
127+ fn test_format_int_exp_precision ( ) {
128+ use core:: { i128, i16, i32, i64, i8} ;
129+
130+ //test that float and integer match
131+ let big_int: u32 = 314_159_265 ;
132+ assert_eq ! ( format!( "{:.1e}" , big_int) , format!( "{:.1e}" , f64 :: from( big_int) ) ) ;
133+
134+ //test adding precision
135+ assert_eq ! ( format!( "{:.10e}" , i8 :: MIN ) , "-1.2800000000e2" ) ;
136+ assert_eq ! ( format!( "{:.10e}" , i16 :: MIN ) , "-3.2768000000e4" ) ;
137+ assert_eq ! ( format!( "{:.10e}" , i32 :: MIN ) , "-2.1474836480e9" ) ;
138+ assert_eq ! ( format!( "{:.20e}" , i64 :: MIN ) , "-9.22337203685477580800e18" ) ;
139+ assert_eq ! ( format!( "{:.40e}" , i128 :: MIN ) , "-1.7014118346046923173168730371588410572800e38" ) ;
140+
141+ //test rounding
142+ assert_eq ! ( format!( "{:.1e}" , i8 :: MIN ) , "-1.3e2" ) ;
143+ assert_eq ! ( format!( "{:.1e}" , i16 :: MIN ) , "-3.3e4" ) ;
144+ assert_eq ! ( format!( "{:.1e}" , i32 :: MIN ) , "-2.1e9" ) ;
145+ assert_eq ! ( format!( "{:.1e}" , i64 :: MIN ) , "-9.2e18" ) ;
146+ assert_eq ! ( format!( "{:.1e}" , i128 :: MIN ) , "-1.7e38" ) ;
147+
148+ //test huge precision
149+ assert_eq ! ( format!( "{:.1000e}" , 1 ) , format!( "1.{}e0" , "0" . repeat( 1000 ) ) ) ;
150+ //test zero precision
151+ assert_eq ! ( format!( "{:.0e}" , 1 ) , format!( "1e0" , ) ) ;
152+
153+ //test padding with precision (and sign)
154+ assert_eq ! ( format!( "{:+10.3e}" , 1 ) , " +1.000e0" ) ;
79155}
80156
81157#[ test]
@@ -86,13 +162,17 @@ fn test_format_int_zero() {
86162 assert_eq ! ( format!( "{:o}" , 0 ) , "0" ) ;
87163 assert_eq ! ( format!( "{:x}" , 0 ) , "0" ) ;
88164 assert_eq ! ( format!( "{:X}" , 0 ) , "0" ) ;
165+ assert_eq ! ( format!( "{:e}" , 0 ) , "0e0" ) ;
166+ assert_eq ! ( format!( "{:E}" , 0 ) , "0E0" ) ;
89167
90168 assert_eq ! ( format!( "{}" , 0u32 ) , "0" ) ;
91169 assert_eq ! ( format!( "{:?}" , 0u32 ) , "0" ) ;
92170 assert_eq ! ( format!( "{:b}" , 0u32 ) , "0" ) ;
93171 assert_eq ! ( format!( "{:o}" , 0u32 ) , "0" ) ;
94172 assert_eq ! ( format!( "{:x}" , 0u32 ) , "0" ) ;
95173 assert_eq ! ( format!( "{:X}" , 0u32 ) , "0" ) ;
174+ assert_eq ! ( format!( "{:e}" , 0u32 ) , "0e0" ) ;
175+ assert_eq ! ( format!( "{:E}" , 0u32 ) , "0E0" ) ;
96176}
97177
98178#[ test]
0 commit comments