]>
Commit | Line | Data |
---|---|---|
1a4d82fc JJ |
1 | #[test] |
2 | fn test_format_int() { | |
3 | // Formatting integers should select the right implementation based off | |
4 | // the type of the argument. Also, hex/octal/binary should be defined | |
5 | // for integers, but they shouldn't emit the negative sign. | |
532ac7d7 XL |
6 | assert_eq!(format!("{}", 1isize), "1"); |
7 | assert_eq!(format!("{}", 1i8), "1"); | |
8 | assert_eq!(format!("{}", 1i16), "1"); | |
9 | assert_eq!(format!("{}", 1i32), "1"); | |
10 | 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"); | |
16 | assert_eq!(format!("{:?}", 1isize), "1"); | |
17 | assert_eq!(format!("{:?}", 1i8), "1"); | |
18 | assert_eq!(format!("{:?}", 1i16), "1"); | |
19 | assert_eq!(format!("{:?}", 1i32), "1"); | |
20 | assert_eq!(format!("{:?}", 1i64), "1"); | |
21 | assert_eq!(format!("{:b}", 1isize), "1"); | |
22 | assert_eq!(format!("{:b}", 1i8), "1"); | |
23 | assert_eq!(format!("{:b}", 1i16), "1"); | |
24 | assert_eq!(format!("{:b}", 1i32), "1"); | |
25 | assert_eq!(format!("{:b}", 1i64), "1"); | |
26 | assert_eq!(format!("{:x}", 1isize), "1"); | |
27 | assert_eq!(format!("{:x}", 1i8), "1"); | |
28 | assert_eq!(format!("{:x}", 1i16), "1"); | |
29 | assert_eq!(format!("{:x}", 1i32), "1"); | |
30 | assert_eq!(format!("{:x}", 1i64), "1"); | |
31 | assert_eq!(format!("{:X}", 1isize), "1"); | |
32 | assert_eq!(format!("{:X}", 1i8), "1"); | |
33 | assert_eq!(format!("{:X}", 1i16), "1"); | |
34 | assert_eq!(format!("{:X}", 1i32), "1"); | |
35 | assert_eq!(format!("{:X}", 1i64), "1"); | |
36 | assert_eq!(format!("{:o}", 1isize), "1"); | |
37 | assert_eq!(format!("{:o}", 1i8), "1"); | |
38 | assert_eq!(format!("{:o}", 1i16), "1"); | |
39 | assert_eq!(format!("{:o}", 1i32), "1"); | |
40 | assert_eq!(format!("{:o}", 1i64), "1"); | |
74b04a01 XL |
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"); | |
1a4d82fc | 51 | |
532ac7d7 XL |
52 | assert_eq!(format!("{}", 1usize), "1"); |
53 | assert_eq!(format!("{}", 1u8), "1"); | |
54 | assert_eq!(format!("{}", 1u16), "1"); | |
55 | assert_eq!(format!("{}", 1u32), "1"); | |
56 | assert_eq!(format!("{}", 1u64), "1"); | |
57 | assert_eq!(format!("{:?}", 1usize), "1"); | |
58 | assert_eq!(format!("{:?}", 1u8), "1"); | |
59 | assert_eq!(format!("{:?}", 1u16), "1"); | |
60 | assert_eq!(format!("{:?}", 1u32), "1"); | |
61 | assert_eq!(format!("{:?}", 1u64), "1"); | |
62 | assert_eq!(format!("{:b}", 1usize), "1"); | |
63 | assert_eq!(format!("{:b}", 1u8), "1"); | |
64 | assert_eq!(format!("{:b}", 1u16), "1"); | |
65 | assert_eq!(format!("{:b}", 1u32), "1"); | |
66 | assert_eq!(format!("{:b}", 1u64), "1"); | |
67 | assert_eq!(format!("{:x}", 1usize), "1"); | |
68 | assert_eq!(format!("{:x}", 1u8), "1"); | |
69 | assert_eq!(format!("{:x}", 1u16), "1"); | |
70 | assert_eq!(format!("{:x}", 1u32), "1"); | |
71 | assert_eq!(format!("{:x}", 1u64), "1"); | |
72 | assert_eq!(format!("{:X}", 1usize), "1"); | |
73 | assert_eq!(format!("{:X}", 1u8), "1"); | |
74 | assert_eq!(format!("{:X}", 1u16), "1"); | |
75 | assert_eq!(format!("{:X}", 1u32), "1"); | |
76 | assert_eq!(format!("{:X}", 1u64), "1"); | |
77 | assert_eq!(format!("{:o}", 1usize), "1"); | |
78 | assert_eq!(format!("{:o}", 1u8), "1"); | |
79 | assert_eq!(format!("{:o}", 1u16), "1"); | |
80 | assert_eq!(format!("{:o}", 1u32), "1"); | |
81 | assert_eq!(format!("{:o}", 1u64), "1"); | |
74b04a01 XL |
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"); | |
1a4d82fc JJ |
90 | |
91 | // Test a larger number | |
532ac7d7 XL |
92 | assert_eq!(format!("{:b}", 55), "110111"); |
93 | assert_eq!(format!("{:o}", 55), "67"); | |
94 | assert_eq!(format!("{}", 55), "55"); | |
95 | assert_eq!(format!("{:x}", 55), "37"); | |
96 | assert_eq!(format!("{:X}", 55), "37"); | |
74b04a01 XL |
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() { | |
74b04a01 XL |
107 | assert_eq!(format!("{:e}", i8::MIN), "-1.28e2"); |
108 | assert_eq!(format!("{:e}", i8::MAX), "1.27e2"); | |
109 | assert_eq!(format!("{:e}", i16::MIN), "-3.2768e4"); | |
110 | assert_eq!(format!("{:e}", i16::MAX), "3.2767e4"); | |
111 | assert_eq!(format!("{:e}", i32::MIN), "-2.147483648e9"); | |
112 | assert_eq!(format!("{:e}", i32::MAX), "2.147483647e9"); | |
113 | assert_eq!(format!("{:e}", i64::MIN), "-9.223372036854775808e18"); | |
114 | assert_eq!(format!("{:e}", i64::MAX), "9.223372036854775807e18"); | |
115 | assert_eq!(format!("{:e}", i128::MIN), "-1.70141183460469231731687303715884105728e38"); | |
116 | assert_eq!(format!("{:e}", i128::MAX), "1.70141183460469231731687303715884105727e38"); | |
117 | ||
118 | assert_eq!(format!("{:e}", u8::MAX), "2.55e2"); | |
119 | assert_eq!(format!("{:e}", u16::MAX), "6.5535e4"); | |
120 | assert_eq!(format!("{:e}", u32::MAX), "4.294967295e9"); | |
121 | assert_eq!(format!("{:e}", u64::MAX), "1.8446744073709551615e19"); | |
122 | assert_eq!(format!("{:e}", u128::MAX), "3.40282366920938463463374607431768211455e38"); | |
123 | } | |
124 | ||
125 | #[test] | |
126 | fn test_format_int_exp_precision() { | |
74b04a01 XL |
127 | //test that float and integer match |
128 | let big_int: u32 = 314_159_265; | |
129 | assert_eq!(format!("{:.1e}", big_int), format!("{:.1e}", f64::from(big_int))); | |
130 | ||
131 | //test adding precision | |
132 | assert_eq!(format!("{:.10e}", i8::MIN), "-1.2800000000e2"); | |
133 | assert_eq!(format!("{:.10e}", i16::MIN), "-3.2768000000e4"); | |
134 | assert_eq!(format!("{:.10e}", i32::MIN), "-2.1474836480e9"); | |
135 | assert_eq!(format!("{:.20e}", i64::MIN), "-9.22337203685477580800e18"); | |
136 | assert_eq!(format!("{:.40e}", i128::MIN), "-1.7014118346046923173168730371588410572800e38"); | |
137 | ||
138 | //test rounding | |
139 | assert_eq!(format!("{:.1e}", i8::MIN), "-1.3e2"); | |
140 | assert_eq!(format!("{:.1e}", i16::MIN), "-3.3e4"); | |
141 | assert_eq!(format!("{:.1e}", i32::MIN), "-2.1e9"); | |
142 | assert_eq!(format!("{:.1e}", i64::MIN), "-9.2e18"); | |
143 | assert_eq!(format!("{:.1e}", i128::MIN), "-1.7e38"); | |
144 | ||
145 | //test huge precision | |
146 | assert_eq!(format!("{:.1000e}", 1), format!("1.{}e0", "0".repeat(1000))); | |
147 | //test zero precision | |
148 | assert_eq!(format!("{:.0e}", 1), format!("1e0",)); | |
149 | ||
150 | //test padding with precision (and sign) | |
151 | assert_eq!(format!("{:+10.3e}", 1), " +1.000e0"); | |
1a4d82fc JJ |
152 | } |
153 | ||
154 | #[test] | |
155 | fn test_format_int_zero() { | |
532ac7d7 XL |
156 | assert_eq!(format!("{}", 0), "0"); |
157 | assert_eq!(format!("{:?}", 0), "0"); | |
158 | assert_eq!(format!("{:b}", 0), "0"); | |
159 | assert_eq!(format!("{:o}", 0), "0"); | |
160 | assert_eq!(format!("{:x}", 0), "0"); | |
161 | assert_eq!(format!("{:X}", 0), "0"); | |
74b04a01 XL |
162 | assert_eq!(format!("{:e}", 0), "0e0"); |
163 | assert_eq!(format!("{:E}", 0), "0E0"); | |
85aaf69f | 164 | |
532ac7d7 XL |
165 | assert_eq!(format!("{}", 0u32), "0"); |
166 | assert_eq!(format!("{:?}", 0u32), "0"); | |
167 | assert_eq!(format!("{:b}", 0u32), "0"); | |
168 | assert_eq!(format!("{:o}", 0u32), "0"); | |
169 | assert_eq!(format!("{:x}", 0u32), "0"); | |
170 | assert_eq!(format!("{:X}", 0u32), "0"); | |
74b04a01 XL |
171 | assert_eq!(format!("{:e}", 0u32), "0e0"); |
172 | assert_eq!(format!("{:E}", 0u32), "0E0"); | |
1a4d82fc JJ |
173 | } |
174 | ||
175 | #[test] | |
176 | fn test_format_int_flags() { | |
532ac7d7 XL |
177 | assert_eq!(format!("{:3}", 1), " 1"); |
178 | assert_eq!(format!("{:>3}", 1), " 1"); | |
179 | assert_eq!(format!("{:>+3}", 1), " +1"); | |
180 | assert_eq!(format!("{:<3}", 1), "1 "); | |
181 | assert_eq!(format!("{:#}", 1), "1"); | |
182 | assert_eq!(format!("{:#x}", 10), "0xa"); | |
183 | assert_eq!(format!("{:#X}", 10), "0xA"); | |
184 | assert_eq!(format!("{:#5x}", 10), " 0xa"); | |
185 | assert_eq!(format!("{:#o}", 10), "0o12"); | |
186 | assert_eq!(format!("{:08x}", 10), "0000000a"); | |
187 | assert_eq!(format!("{:8x}", 10), " a"); | |
188 | assert_eq!(format!("{:<8x}", 10), "a "); | |
189 | assert_eq!(format!("{:>8x}", 10), " a"); | |
190 | assert_eq!(format!("{:#08x}", 10), "0x00000a"); | |
191 | assert_eq!(format!("{:08}", -10), "-0000010"); | |
192 | assert_eq!(format!("{:x}", !0u8), "ff"); | |
193 | assert_eq!(format!("{:X}", !0u8), "FF"); | |
194 | assert_eq!(format!("{:b}", !0u8), "11111111"); | |
195 | assert_eq!(format!("{:o}", !0u8), "377"); | |
196 | assert_eq!(format!("{:#x}", !0u8), "0xff"); | |
197 | assert_eq!(format!("{:#X}", !0u8), "0xFF"); | |
198 | assert_eq!(format!("{:#b}", !0u8), "0b11111111"); | |
199 | assert_eq!(format!("{:#o}", !0u8), "0o377"); | |
1a4d82fc JJ |
200 | } |
201 | ||
202 | #[test] | |
203 | fn test_format_int_sign_padding() { | |
532ac7d7 XL |
204 | assert_eq!(format!("{:+5}", 1), " +1"); |
205 | assert_eq!(format!("{:+5}", -1), " -1"); | |
206 | assert_eq!(format!("{:05}", 1), "00001"); | |
207 | assert_eq!(format!("{:05}", -1), "-0001"); | |
208 | assert_eq!(format!("{:+05}", 1), "+0001"); | |
209 | assert_eq!(format!("{:+05}", -1), "-0001"); | |
1a4d82fc JJ |
210 | } |
211 | ||
212 | #[test] | |
213 | fn test_format_int_twos_complement() { | |
532ac7d7 XL |
214 | assert_eq!(format!("{}", i8::MIN), "-128"); |
215 | assert_eq!(format!("{}", i16::MIN), "-32768"); | |
216 | assert_eq!(format!("{}", i32::MIN), "-2147483648"); | |
217 | assert_eq!(format!("{}", i64::MIN), "-9223372036854775808"); | |
1a4d82fc | 218 | } |
0531ce1d XL |
219 | |
220 | #[test] | |
221 | fn test_format_debug_hex() { | |
532ac7d7 XL |
222 | assert_eq!(format!("{:02x?}", b"Foo\0"), "[46, 6f, 6f, 00]"); |
223 | assert_eq!(format!("{:02X?}", b"Foo\0"), "[46, 6F, 6F, 00]"); | |
0531ce1d | 224 | } |