1+ use std:: mem:: size_of;
2+
3+ #[ test]
4+ fn test_format_int_zero ( ) {
5+ assert_eq ! ( format!( "{}" , 0 ) , "0" ) ;
6+ assert_eq ! ( format!( "{:?}" , 0 ) , "0" ) ;
7+ assert_eq ! ( format!( "{:b}" , 0 ) , "0" ) ;
8+ assert_eq ! ( format!( "{:o}" , 0 ) , "0" ) ;
9+ assert_eq ! ( format!( "{:x}" , 0 ) , "0" ) ;
10+ assert_eq ! ( format!( "{:X}" , 0 ) , "0" ) ;
11+ assert_eq ! ( format!( "{:e}" , 0 ) , "0e0" ) ;
12+ assert_eq ! ( format!( "{:E}" , 0 ) , "0E0" ) ;
13+
14+ // again, with unsigned
15+ assert_eq ! ( format!( "{}" , 0u32 ) , "0" ) ;
16+ assert_eq ! ( format!( "{:?}" , 0u32 ) , "0" ) ;
17+ assert_eq ! ( format!( "{:b}" , 0u32 ) , "0" ) ;
18+ assert_eq ! ( format!( "{:o}" , 0u32 ) , "0" ) ;
19+ assert_eq ! ( format!( "{:x}" , 0u32 ) , "0" ) ;
20+ assert_eq ! ( format!( "{:X}" , 0u32 ) , "0" ) ;
21+ assert_eq ! ( format!( "{:e}" , 0u32 ) , "0e0" ) ;
22+ assert_eq ! ( format!( "{:E}" , 0u32 ) , "0E0" ) ;
23+ }
24+
125#[ test]
2- fn test_format_int ( ) {
26+ fn test_format_int_one ( ) {
327 // Formatting integers should select the right implementation based off
428 // the type of the argument. Also, hex/octal/binary should be defined
529 // for integers, but they shouldn't emit the negative sign.
@@ -8,87 +32,157 @@ fn test_format_int() {
832 assert_eq ! ( format!( "{}" , 1i16 ) , "1" ) ;
933 assert_eq ! ( format!( "{}" , 1i32 ) , "1" ) ;
1034 assert_eq ! ( format!( "{}" , 1i64 ) , "1" ) ;
11- assert_eq ! ( format!( "{}" , -1isize ) , "-1" ) ;
12- assert_eq ! ( format!( "{}" , -1i8 ) , "-1" ) ;
13- assert_eq ! ( format!( "{}" , -1i16 ) , "-1" ) ;
14- assert_eq ! ( format!( "{}" , -1i32 ) , "-1" ) ;
15- assert_eq ! ( format!( "{}" , -1i64 ) , "-1" ) ;
35+ assert_eq ! ( format!( "{}" , 1i128 ) , "1" ) ;
1636 assert_eq ! ( format!( "{:?}" , 1isize ) , "1" ) ;
1737 assert_eq ! ( format!( "{:?}" , 1i8 ) , "1" ) ;
1838 assert_eq ! ( format!( "{:?}" , 1i16 ) , "1" ) ;
1939 assert_eq ! ( format!( "{:?}" , 1i32 ) , "1" ) ;
2040 assert_eq ! ( format!( "{:?}" , 1i64 ) , "1" ) ;
41+ assert_eq ! ( format!( "{:?}" , 1i128 ) , "1" ) ;
2142 assert_eq ! ( format!( "{:b}" , 1isize ) , "1" ) ;
2243 assert_eq ! ( format!( "{:b}" , 1i8 ) , "1" ) ;
2344 assert_eq ! ( format!( "{:b}" , 1i16 ) , "1" ) ;
2445 assert_eq ! ( format!( "{:b}" , 1i32 ) , "1" ) ;
2546 assert_eq ! ( format!( "{:b}" , 1i64 ) , "1" ) ;
47+ assert_eq ! ( format!( "{:b}" , 1i128 ) , "1" ) ;
2648 assert_eq ! ( format!( "{:x}" , 1isize ) , "1" ) ;
2749 assert_eq ! ( format!( "{:x}" , 1i8 ) , "1" ) ;
2850 assert_eq ! ( format!( "{:x}" , 1i16 ) , "1" ) ;
2951 assert_eq ! ( format!( "{:x}" , 1i32 ) , "1" ) ;
3052 assert_eq ! ( format!( "{:x}" , 1i64 ) , "1" ) ;
53+ assert_eq ! ( format!( "{:x}" , 1i128 ) , "1" ) ;
3154 assert_eq ! ( format!( "{:X}" , 1isize ) , "1" ) ;
3255 assert_eq ! ( format!( "{:X}" , 1i8 ) , "1" ) ;
3356 assert_eq ! ( format!( "{:X}" , 1i16 ) , "1" ) ;
3457 assert_eq ! ( format!( "{:X}" , 1i32 ) , "1" ) ;
3558 assert_eq ! ( format!( "{:X}" , 1i64 ) , "1" ) ;
59+ assert_eq ! ( format!( "{:X}" , 1i128 ) , "1" ) ;
3660 assert_eq ! ( format!( "{:o}" , 1isize ) , "1" ) ;
3761 assert_eq ! ( format!( "{:o}" , 1i8 ) , "1" ) ;
3862 assert_eq ! ( format!( "{:o}" , 1i16 ) , "1" ) ;
3963 assert_eq ! ( format!( "{:o}" , 1i32 ) , "1" ) ;
4064 assert_eq ! ( format!( "{:o}" , 1i64 ) , "1" ) ;
65+ assert_eq ! ( format!( "{:o}" , 1i128 ) , "1" ) ;
4166 assert_eq ! ( format!( "{:e}" , 1isize ) , "1e0" ) ;
4267 assert_eq ! ( format!( "{:e}" , 1i8 ) , "1e0" ) ;
4368 assert_eq ! ( format!( "{:e}" , 1i16 ) , "1e0" ) ;
4469 assert_eq ! ( format!( "{:e}" , 1i32 ) , "1e0" ) ;
4570 assert_eq ! ( format!( "{:e}" , 1i64 ) , "1e0" ) ;
71+ assert_eq ! ( format!( "{:e}" , 1i128 ) , "1e0" ) ;
4672 assert_eq ! ( format!( "{:E}" , 1isize ) , "1E0" ) ;
4773 assert_eq ! ( format!( "{:E}" , 1i8 ) , "1E0" ) ;
4874 assert_eq ! ( format!( "{:E}" , 1i16 ) , "1E0" ) ;
4975 assert_eq ! ( format!( "{:E}" , 1i32 ) , "1E0" ) ;
5076 assert_eq ! ( format!( "{:E}" , 1i64 ) , "1E0" ) ;
77+ assert_eq ! ( format!( "{:E}" , 1i128 ) , "1E0" ) ;
5178
79+ // again, with unsigned
5280 assert_eq ! ( format!( "{}" , 1usize ) , "1" ) ;
5381 assert_eq ! ( format!( "{}" , 1u8 ) , "1" ) ;
5482 assert_eq ! ( format!( "{}" , 1u16 ) , "1" ) ;
5583 assert_eq ! ( format!( "{}" , 1u32 ) , "1" ) ;
5684 assert_eq ! ( format!( "{}" , 1u64 ) , "1" ) ;
85+ assert_eq ! ( format!( "{}" , 1u128 ) , "1" ) ;
5786 assert_eq ! ( format!( "{:?}" , 1usize ) , "1" ) ;
5887 assert_eq ! ( format!( "{:?}" , 1u8 ) , "1" ) ;
5988 assert_eq ! ( format!( "{:?}" , 1u16 ) , "1" ) ;
6089 assert_eq ! ( format!( "{:?}" , 1u32 ) , "1" ) ;
6190 assert_eq ! ( format!( "{:?}" , 1u64 ) , "1" ) ;
91+ assert_eq ! ( format!( "{:?}" , 1u128 ) , "1" ) ;
6292 assert_eq ! ( format!( "{:b}" , 1usize ) , "1" ) ;
6393 assert_eq ! ( format!( "{:b}" , 1u8 ) , "1" ) ;
6494 assert_eq ! ( format!( "{:b}" , 1u16 ) , "1" ) ;
6595 assert_eq ! ( format!( "{:b}" , 1u32 ) , "1" ) ;
6696 assert_eq ! ( format!( "{:b}" , 1u64 ) , "1" ) ;
97+ assert_eq ! ( format!( "{:b}" , 1u128 ) , "1" ) ;
6798 assert_eq ! ( format!( "{:x}" , 1usize ) , "1" ) ;
6899 assert_eq ! ( format!( "{:x}" , 1u8 ) , "1" ) ;
69100 assert_eq ! ( format!( "{:x}" , 1u16 ) , "1" ) ;
70101 assert_eq ! ( format!( "{:x}" , 1u32 ) , "1" ) ;
71102 assert_eq ! ( format!( "{:x}" , 1u64 ) , "1" ) ;
103+ assert_eq ! ( format!( "{:x}" , 1u128 ) , "1" ) ;
72104 assert_eq ! ( format!( "{:X}" , 1usize ) , "1" ) ;
73105 assert_eq ! ( format!( "{:X}" , 1u8 ) , "1" ) ;
74106 assert_eq ! ( format!( "{:X}" , 1u16 ) , "1" ) ;
75107 assert_eq ! ( format!( "{:X}" , 1u32 ) , "1" ) ;
76108 assert_eq ! ( format!( "{:X}" , 1u64 ) , "1" ) ;
109+ assert_eq ! ( format!( "{:X}" , 1u128 ) , "1" ) ;
77110 assert_eq ! ( format!( "{:o}" , 1usize ) , "1" ) ;
78111 assert_eq ! ( format!( "{:o}" , 1u8 ) , "1" ) ;
79112 assert_eq ! ( format!( "{:o}" , 1u16 ) , "1" ) ;
80113 assert_eq ! ( format!( "{:o}" , 1u32 ) , "1" ) ;
81114 assert_eq ! ( format!( "{:o}" , 1u64 ) , "1" ) ;
115+ assert_eq ! ( format!( "{:o}" , 1u128 ) , "1" ) ;
82116 assert_eq ! ( format!( "{:e}" , 1u8 ) , "1e0" ) ;
83117 assert_eq ! ( format!( "{:e}" , 1u16 ) , "1e0" ) ;
84118 assert_eq ! ( format!( "{:e}" , 1u32 ) , "1e0" ) ;
85119 assert_eq ! ( format!( "{:e}" , 1u64 ) , "1e0" ) ;
120+ assert_eq ! ( format!( "{:e}" , 1u128 ) , "1e0" ) ;
86121 assert_eq ! ( format!( "{:E}" , 1u8 ) , "1E0" ) ;
87122 assert_eq ! ( format!( "{:E}" , 1u16 ) , "1E0" ) ;
88123 assert_eq ! ( format!( "{:E}" , 1u32 ) , "1E0" ) ;
89124 assert_eq ! ( format!( "{:E}" , 1u64 ) , "1E0" ) ;
125+ assert_eq ! ( format!( "{:E}" , 1u128 ) , "1E0" ) ;
90126
91- // Test a larger number
127+ // again, with negative
128+ assert_eq ! ( format!( "{}" , -1isize ) , "-1" ) ;
129+ assert_eq ! ( format!( "{}" , -1i8 ) , "-1" ) ;
130+ assert_eq ! ( format!( "{}" , -1i16 ) , "-1" ) ;
131+ assert_eq ! ( format!( "{}" , -1i32 ) , "-1" ) ;
132+ assert_eq ! ( format!( "{}" , -1i64 ) , "-1" ) ;
133+ assert_eq ! ( format!( "{}" , -1i128 ) , "-1" ) ;
134+ assert_eq ! ( format!( "{:?}" , -1isize ) , "-1" ) ;
135+ assert_eq ! ( format!( "{:?}" , -1i8 ) , "-1" ) ;
136+ assert_eq ! ( format!( "{:?}" , -1i16 ) , "-1" ) ;
137+ assert_eq ! ( format!( "{:?}" , -1i32 ) , "-1" ) ;
138+ assert_eq ! ( format!( "{:?}" , -1i64 ) , "-1" ) ;
139+ assert_eq ! ( format!( "{:?}" , -1i128 ) , "-1" ) ;
140+ assert_eq ! ( format!( "{:b}" , -1isize ) , "1" . repeat( size_of:: <isize >( ) * 8 ) ) ;
141+ assert_eq ! ( format!( "{:b}" , -1i8 ) , "11111111" ) ;
142+ assert_eq ! ( format!( "{:b}" , -1i16 ) , "1111111111111111" ) ;
143+ assert_eq ! ( format!( "{:b}" , -1i32 ) , "11111111111111111111111111111111" ) ;
144+ assert_eq ! (
145+ format!( "{:b}" , -1i64 ) ,
146+ "1111111111111111111111111111111111111111111111111111111111111111"
147+ ) ;
148+ assert_eq ! (
149+ format!( "{:b}" , -1i128 ) ,
150+ "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
151+ ) ;
152+ assert_eq ! ( format!( "{:x}" , -1isize ) , "ff" . repeat( size_of:: <isize >( ) ) ) ;
153+ assert_eq ! ( format!( "{:x}" , -1i8 ) , "ff" ) ;
154+ assert_eq ! ( format!( "{:x}" , -1i16 ) , "ffff" ) ;
155+ assert_eq ! ( format!( "{:x}" , -1i32 ) , "ffffffff" ) ;
156+ assert_eq ! ( format!( "{:x}" , -1i64 ) , "ffffffffffffffff" ) ;
157+ assert_eq ! ( format!( "{:x}" , -1i128 ) , "ffffffffffffffffffffffffffffffff" ) ;
158+ assert_eq ! ( format!( "{:X}" , -1isize ) , "FF" . repeat( size_of:: <isize >( ) ) ) ;
159+ assert_eq ! ( format!( "{:X}" , -1i8 ) , "FF" ) ;
160+ assert_eq ! ( format!( "{:X}" , -1i16 ) , "FFFF" ) ;
161+ assert_eq ! ( format!( "{:X}" , -1i32 ) , "FFFFFFFF" ) ;
162+ assert_eq ! ( format!( "{:X}" , -1i64 ) , "FFFFFFFFFFFFFFFF" ) ;
163+ assert_eq ! ( format!( "{:X}" , -1i128 ) , "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" ) ;
164+ // octal test for isize omitted
165+ assert_eq ! ( format!( "{:o}" , -1i8 ) , "377" ) ;
166+ assert_eq ! ( format!( "{:o}" , -1i16 ) , "177777" ) ;
167+ assert_eq ! ( format!( "{:o}" , -1i32 ) , "37777777777" ) ;
168+ assert_eq ! ( format!( "{:o}" , -1i64 ) , "1777777777777777777777" ) ;
169+ assert_eq ! ( format!( "{:o}" , -1i128 ) , "3777777777777777777777777777777777777777777" ) ;
170+ assert_eq ! ( format!( "{:e}" , -1isize ) , "-1e0" ) ;
171+ assert_eq ! ( format!( "{:e}" , -1i8 ) , "-1e0" ) ;
172+ assert_eq ! ( format!( "{:e}" , -1i16 ) , "-1e0" ) ;
173+ assert_eq ! ( format!( "{:e}" , -1i32 ) , "-1e0" ) ;
174+ assert_eq ! ( format!( "{:e}" , -1i64 ) , "-1e0" ) ;
175+ assert_eq ! ( format!( "{:e}" , -1i128 ) , "-1e0" ) ;
176+ assert_eq ! ( format!( "{:E}" , -1isize ) , "-1E0" ) ;
177+ assert_eq ! ( format!( "{:E}" , -1i8 ) , "-1E0" ) ;
178+ assert_eq ! ( format!( "{:E}" , -1i16 ) , "-1E0" ) ;
179+ assert_eq ! ( format!( "{:E}" , -1i32 ) , "-1E0" ) ;
180+ assert_eq ! ( format!( "{:E}" , -1i64 ) , "-1E0" ) ;
181+ assert_eq ! ( format!( "{:E}" , -1i128 ) , "-1E0" ) ;
182+ }
183+
184+ #[ test]
185+ fn test_format_int_misc ( ) {
92186 assert_eq ! ( format!( "{:b}" , 55 ) , "110111" ) ;
93187 assert_eq ! ( format!( "{:o}" , 55 ) , "67" ) ;
94188 assert_eq ! ( format!( "{}" , 55 ) , "55" ) ;
@@ -102,6 +196,26 @@ fn test_format_int() {
102196 assert_eq ! ( format!( "{:E}" , 10000000001u64 ) , "1.0000000001E10" ) ;
103197}
104198
199+ #[ test]
200+ fn test_format_int_limits ( ) {
201+ assert_eq ! ( format!( "{}" , i8 :: MIN ) , "-128" ) ;
202+ assert_eq ! ( format!( "{}" , i8 :: MAX ) , "127" ) ;
203+ assert_eq ! ( format!( "{}" , i16 :: MIN ) , "-32768" ) ;
204+ assert_eq ! ( format!( "{}" , i16 :: MAX ) , "32767" ) ;
205+ assert_eq ! ( format!( "{}" , i32 :: MIN ) , "-2147483648" ) ;
206+ assert_eq ! ( format!( "{}" , i32 :: MAX ) , "2147483647" ) ;
207+ assert_eq ! ( format!( "{}" , i64 :: MIN ) , "-9223372036854775808" ) ;
208+ assert_eq ! ( format!( "{}" , i64 :: MAX ) , "9223372036854775807" ) ;
209+ assert_eq ! ( format!( "{}" , i128 :: MIN ) , "-170141183460469231731687303715884105728" ) ;
210+ assert_eq ! ( format!( "{}" , i128 :: MAX ) , "170141183460469231731687303715884105727" ) ;
211+
212+ assert_eq ! ( format!( "{}" , u8 :: MAX ) , "255" ) ;
213+ assert_eq ! ( format!( "{}" , u16 :: MAX ) , "65535" ) ;
214+ assert_eq ! ( format!( "{}" , u32 :: MAX ) , "4294967295" ) ;
215+ assert_eq ! ( format!( "{}" , u64 :: MAX ) , "18446744073709551615" ) ;
216+ assert_eq ! ( format!( "{}" , u128 :: MAX ) , "340282366920938463463374607431768211455" ) ;
217+ }
218+
105219#[ test]
106220fn test_format_int_exp_limits ( ) {
107221 assert_eq ! ( format!( "{:e}" , i8 :: MIN ) , "-1.28e2" ) ;
@@ -167,27 +281,6 @@ fn test_format_int_exp_precision() {
167281 }
168282}
169283
170- #[ test]
171- fn test_format_int_zero ( ) {
172- assert_eq ! ( format!( "{}" , 0 ) , "0" ) ;
173- assert_eq ! ( format!( "{:?}" , 0 ) , "0" ) ;
174- assert_eq ! ( format!( "{:b}" , 0 ) , "0" ) ;
175- assert_eq ! ( format!( "{:o}" , 0 ) , "0" ) ;
176- assert_eq ! ( format!( "{:x}" , 0 ) , "0" ) ;
177- assert_eq ! ( format!( "{:X}" , 0 ) , "0" ) ;
178- assert_eq ! ( format!( "{:e}" , 0 ) , "0e0" ) ;
179- assert_eq ! ( format!( "{:E}" , 0 ) , "0E0" ) ;
180-
181- assert_eq ! ( format!( "{}" , 0u32 ) , "0" ) ;
182- assert_eq ! ( format!( "{:?}" , 0u32 ) , "0" ) ;
183- assert_eq ! ( format!( "{:b}" , 0u32 ) , "0" ) ;
184- assert_eq ! ( format!( "{:o}" , 0u32 ) , "0" ) ;
185- assert_eq ! ( format!( "{:x}" , 0u32 ) , "0" ) ;
186- assert_eq ! ( format!( "{:X}" , 0u32 ) , "0" ) ;
187- assert_eq ! ( format!( "{:e}" , 0u32 ) , "0e0" ) ;
188- assert_eq ! ( format!( "{:E}" , 0u32 ) , "0E0" ) ;
189- }
190-
191284#[ test]
192285fn test_format_int_flags ( ) {
193286 assert_eq ! ( format!( "{:3}" , 1 ) , " 1" ) ;
@@ -225,14 +318,6 @@ fn test_format_int_sign_padding() {
225318 assert_eq ! ( format!( "{:+05}" , -1 ) , "-0001" ) ;
226319}
227320
228- #[ test]
229- fn test_format_int_twos_complement ( ) {
230- assert_eq ! ( format!( "{}" , i8 :: MIN ) , "-128" ) ;
231- assert_eq ! ( format!( "{}" , i16 :: MIN ) , "-32768" ) ;
232- assert_eq ! ( format!( "{}" , i32 :: MIN ) , "-2147483648" ) ;
233- assert_eq ! ( format!( "{}" , i64 :: MIN ) , "-9223372036854775808" ) ;
234- }
235-
236321#[ test]
237322fn test_format_debug_hex ( ) {
238323 assert_eq ! ( format!( "{:02x?}" , b"Foo\0 " ) , "[46, 6f, 6f, 00]" ) ;
0 commit comments