@@ -38,6 +38,16 @@ fn test_format_int() {
38
38
assert_eq ! ( format!( "{:o}" , 1i16 ) , "1" ) ;
39
39
assert_eq ! ( format!( "{:o}" , 1i32 ) , "1" ) ;
40
40
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" ) ;
41
51
42
52
assert_eq ! ( format!( "{}" , 1usize ) , "1" ) ;
43
53
assert_eq ! ( format!( "{}" , 1u8 ) , "1" ) ;
@@ -69,13 +79,79 @@ fn test_format_int() {
69
79
assert_eq ! ( format!( "{:o}" , 1u16 ) , "1" ) ;
70
80
assert_eq ! ( format!( "{:o}" , 1u32 ) , "1" ) ;
71
81
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" ) ;
72
90
73
91
// Test a larger number
74
92
assert_eq ! ( format!( "{:b}" , 55 ) , "110111" ) ;
75
93
assert_eq ! ( format!( "{:o}" , 55 ) , "67" ) ;
76
94
assert_eq ! ( format!( "{}" , 55 ) , "55" ) ;
77
95
assert_eq ! ( format!( "{:x}" , 55 ) , "37" ) ;
78
96
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" ) ;
79
155
}
80
156
81
157
#[ test]
@@ -86,13 +162,17 @@ fn test_format_int_zero() {
86
162
assert_eq ! ( format!( "{:o}" , 0 ) , "0" ) ;
87
163
assert_eq ! ( format!( "{:x}" , 0 ) , "0" ) ;
88
164
assert_eq ! ( format!( "{:X}" , 0 ) , "0" ) ;
165
+ assert_eq ! ( format!( "{:e}" , 0 ) , "0e0" ) ;
166
+ assert_eq ! ( format!( "{:E}" , 0 ) , "0E0" ) ;
89
167
90
168
assert_eq ! ( format!( "{}" , 0u32 ) , "0" ) ;
91
169
assert_eq ! ( format!( "{:?}" , 0u32 ) , "0" ) ;
92
170
assert_eq ! ( format!( "{:b}" , 0u32 ) , "0" ) ;
93
171
assert_eq ! ( format!( "{:o}" , 0u32 ) , "0" ) ;
94
172
assert_eq ! ( format!( "{:x}" , 0u32 ) , "0" ) ;
95
173
assert_eq ! ( format!( "{:X}" , 0u32 ) , "0" ) ;
174
+ assert_eq ! ( format!( "{:e}" , 0u32 ) , "0e0" ) ;
175
+ assert_eq ! ( format!( "{:E}" , 0u32 ) , "0E0" ) ;
96
176
}
97
177
98
178
#[ test]
0 commit comments