3 assert_eq!("1", format!("{:.0}", 1.0f64));
4 assert_eq!("9", format!("{:.0}", 9.4f64));
5 assert_eq!("10", format!("{:.0}", 9.9f64));
6 assert_eq!("9.8", format!("{:.1}", 9.849f64));
7 assert_eq!("9.9", format!("{:.1}", 9.851f64));
8 assert_eq!("0", format!("{:.0}", 0.5f64));
9 assert_eq!("1.23456789e6", format!("{:e}", 1234567.89f64));
10 assert_eq!("1.23456789e3", format!("{:e}", 1234.56789f64));
11 assert_eq!("1.23456789E6", format!("{:E}", 1234567.89f64));
12 assert_eq!("1.23456789E3", format!("{:E}", 1234.56789f64));
13 assert_eq!("0.0", format!("{:?}", 0.0f64));
14 assert_eq!("1.01", format!("{:?}", 1.01f64));
16 let high_cutoff = 1e16_f64;
17 assert_eq!("1e16", format!("{:?}", high_cutoff));
18 assert_eq!("-1e16", format!("{:?}", -high_cutoff));
19 assert!(!is_exponential(&format!("{:?}", high_cutoff * (1.0 - 2.0 * f64::EPSILON))));
20 assert_eq!("-3.0", format!("{:?}", -3f64));
21 assert_eq!("0.0001", format!("{:?}", 0.0001f64));
22 assert_eq!("9e-5", format!("{:?}", 0.00009f64));
23 assert_eq!("1234567.9", format!("{:.1?}", 1234567.89f64));
24 assert_eq!("1234.6", format!("{:.1?}", 1234.56789f64));
28 fn test_format_f64_rounds_ties_to_even() {
29 assert_eq!("0", format!("{:.0}", 0.5f64));
30 assert_eq!("2", format!("{:.0}", 1.5f64));
31 assert_eq!("2", format!("{:.0}", 2.5f64));
32 assert_eq!("4", format!("{:.0}", 3.5f64));
33 assert_eq!("4", format!("{:.0}", 4.5f64));
34 assert_eq!("6", format!("{:.0}", 5.5f64));
35 assert_eq!("128", format!("{:.0}", 127.5f64));
36 assert_eq!("128", format!("{:.0}", 128.5f64));
37 assert_eq!("0.2", format!("{:.1}", 0.25f64));
38 assert_eq!("0.8", format!("{:.1}", 0.75f64));
39 assert_eq!("0.12", format!("{:.2}", 0.125f64));
40 assert_eq!("0.88", format!("{:.2}", 0.875f64));
41 assert_eq!("0.062", format!("{:.3}", 0.062f64));
42 assert_eq!("-0", format!("{:.0}", -0.5f64));
43 assert_eq!("-2", format!("{:.0}", -1.5f64));
44 assert_eq!("-2", format!("{:.0}", -2.5f64));
45 assert_eq!("-4", format!("{:.0}", -3.5f64));
46 assert_eq!("-4", format!("{:.0}", -4.5f64));
47 assert_eq!("-6", format!("{:.0}", -5.5f64));
48 assert_eq!("-128", format!("{:.0}", -127.5f64));
49 assert_eq!("-128", format!("{:.0}", -128.5f64));
50 assert_eq!("-0.2", format!("{:.1}", -0.25f64));
51 assert_eq!("-0.8", format!("{:.1}", -0.75f64));
52 assert_eq!("-0.12", format!("{:.2}", -0.125f64));
53 assert_eq!("-0.88", format!("{:.2}", -0.875f64));
54 assert_eq!("-0.062", format!("{:.3}", -0.062f64));
56 assert_eq!("2e0", format!("{:.0e}", 1.5f64));
57 assert_eq!("2e0", format!("{:.0e}", 2.5f64));
58 assert_eq!("4e0", format!("{:.0e}", 3.5f64));
59 assert_eq!("4e0", format!("{:.0e}", 4.5f64));
60 assert_eq!("6e0", format!("{:.0e}", 5.5f64));
61 assert_eq!("1.28e2", format!("{:.2e}", 127.5f64));
62 assert_eq!("1.28e2", format!("{:.2e}", 128.5f64));
63 assert_eq!("-2e0", format!("{:.0e}", -1.5f64));
64 assert_eq!("-2e0", format!("{:.0e}", -2.5f64));
65 assert_eq!("-4e0", format!("{:.0e}", -3.5f64));
66 assert_eq!("-4e0", format!("{:.0e}", -4.5f64));
67 assert_eq!("-6e0", format!("{:.0e}", -5.5f64));
68 assert_eq!("-1.28e2", format!("{:.2e}", -127.5f64));
69 assert_eq!("-1.28e2", format!("{:.2e}", -128.5f64));
71 assert_eq!("2E0", format!("{:.0E}", 1.5f64));
72 assert_eq!("2E0", format!("{:.0E}", 2.5f64));
73 assert_eq!("4E0", format!("{:.0E}", 3.5f64));
74 assert_eq!("4E0", format!("{:.0E}", 4.5f64));
75 assert_eq!("6E0", format!("{:.0E}", 5.5f64));
76 assert_eq!("1.28E2", format!("{:.2E}", 127.5f64));
77 assert_eq!("1.28E2", format!("{:.2E}", 128.5f64));
78 assert_eq!("-2E0", format!("{:.0E}", -1.5f64));
79 assert_eq!("-2E0", format!("{:.0E}", -2.5f64));
80 assert_eq!("-4E0", format!("{:.0E}", -3.5f64));
81 assert_eq!("-4E0", format!("{:.0E}", -4.5f64));
82 assert_eq!("-6E0", format!("{:.0E}", -5.5f64));
83 assert_eq!("-1.28E2", format!("{:.2E}", -127.5f64));
84 assert_eq!("-1.28E2", format!("{:.2E}", -128.5f64));
88 fn test_format_f32() {
89 assert_eq!("1", format!("{:.0}", 1.0f32));
90 assert_eq!("9", format!("{:.0}", 9.4f32));
91 assert_eq!("10", format!("{:.0}", 9.9f32));
92 assert_eq!("9.8", format!("{:.1}", 9.849f32));
93 assert_eq!("9.9", format!("{:.1}", 9.851f32));
94 assert_eq!("0", format!("{:.0}", 0.5f32));
95 assert_eq!("1.2345679e6", format!("{:e}", 1234567.89f32));
96 assert_eq!("1.2345679e3", format!("{:e}", 1234.56789f32));
97 assert_eq!("1.2345679E6", format!("{:E}", 1234567.89f32));
98 assert_eq!("1.2345679E3", format!("{:E}", 1234.56789f32));
99 assert_eq!("0.0", format!("{:?}", 0.0f32));
100 assert_eq!("1.01", format!("{:?}", 1.01f32));
102 let high_cutoff = 1e16_f32;
103 assert_eq!("1e16", format!("{:?}", high_cutoff));
104 assert_eq!("-1e16", format!("{:?}", -high_cutoff));
105 assert!(!is_exponential(&format!("{:?}", high_cutoff * (1.0 - 2.0 * f32::EPSILON))));
106 assert_eq!("-3.0", format!("{:?}", -3f32));
107 assert_eq!("0.0001", format!("{:?}", 0.0001f32));
108 assert_eq!("9e-5", format!("{:?}", 0.00009f32));
109 assert_eq!("1234567.9", format!("{:.1?}", 1234567.89f32));
110 assert_eq!("1234.6", format!("{:.1?}", 1234.56789f32));
114 fn test_format_f32_rounds_ties_to_even() {
115 assert_eq!("0", format!("{:.0}", 0.5f32));
116 assert_eq!("2", format!("{:.0}", 1.5f32));
117 assert_eq!("2", format!("{:.0}", 2.5f32));
118 assert_eq!("4", format!("{:.0}", 3.5f32));
119 assert_eq!("4", format!("{:.0}", 4.5f32));
120 assert_eq!("6", format!("{:.0}", 5.5f32));
121 assert_eq!("128", format!("{:.0}", 127.5f32));
122 assert_eq!("128", format!("{:.0}", 128.5f32));
123 assert_eq!("0.2", format!("{:.1}", 0.25f32));
124 assert_eq!("0.8", format!("{:.1}", 0.75f32));
125 assert_eq!("0.12", format!("{:.2}", 0.125f32));
126 assert_eq!("0.88", format!("{:.2}", 0.875f32));
127 assert_eq!("0.062", format!("{:.3}", 0.062f32));
128 assert_eq!("-0", format!("{:.0}", -0.5f32));
129 assert_eq!("-2", format!("{:.0}", -1.5f32));
130 assert_eq!("-2", format!("{:.0}", -2.5f32));
131 assert_eq!("-4", format!("{:.0}", -3.5f32));
132 assert_eq!("-4", format!("{:.0}", -4.5f32));
133 assert_eq!("-6", format!("{:.0}", -5.5f32));
134 assert_eq!("-128", format!("{:.0}", -127.5f32));
135 assert_eq!("-128", format!("{:.0}", -128.5f32));
136 assert_eq!("-0.2", format!("{:.1}", -0.25f32));
137 assert_eq!("-0.8", format!("{:.1}", -0.75f32));
138 assert_eq!("-0.12", format!("{:.2}", -0.125f32));
139 assert_eq!("-0.88", format!("{:.2}", -0.875f32));
140 assert_eq!("-0.062", format!("{:.3}", -0.062f32));
142 assert_eq!("2e0", format!("{:.0e}", 1.5f32));
143 assert_eq!("2e0", format!("{:.0e}", 2.5f32));
144 assert_eq!("4e0", format!("{:.0e}", 3.5f32));
145 assert_eq!("4e0", format!("{:.0e}", 4.5f32));
146 assert_eq!("6e0", format!("{:.0e}", 5.5f32));
147 assert_eq!("1.28e2", format!("{:.2e}", 127.5f32));
148 assert_eq!("1.28e2", format!("{:.2e}", 128.5f32));
149 assert_eq!("-2e0", format!("{:.0e}", -1.5f32));
150 assert_eq!("-2e0", format!("{:.0e}", -2.5f32));
151 assert_eq!("-4e0", format!("{:.0e}", -3.5f32));
152 assert_eq!("-4e0", format!("{:.0e}", -4.5f32));
153 assert_eq!("-6e0", format!("{:.0e}", -5.5f32));
154 assert_eq!("-1.28e2", format!("{:.2e}", -127.5f32));
155 assert_eq!("-1.28e2", format!("{:.2e}", -128.5f32));
157 assert_eq!("2E0", format!("{:.0E}", 1.5f32));
158 assert_eq!("2E0", format!("{:.0E}", 2.5f32));
159 assert_eq!("4E0", format!("{:.0E}", 3.5f32));
160 assert_eq!("4E0", format!("{:.0E}", 4.5f32));
161 assert_eq!("6E0", format!("{:.0E}", 5.5f32));
162 assert_eq!("1.28E2", format!("{:.2E}", 127.5f32));
163 assert_eq!("1.28E2", format!("{:.2E}", 128.5f32));
164 assert_eq!("-2E0", format!("{:.0E}", -1.5f32));
165 assert_eq!("-2E0", format!("{:.0E}", -2.5f32));
166 assert_eq!("-4E0", format!("{:.0E}", -3.5f32));
167 assert_eq!("-4E0", format!("{:.0E}", -4.5f32));
168 assert_eq!("-6E0", format!("{:.0E}", -5.5f32));
169 assert_eq!("-1.28E2", format!("{:.2E}", -127.5f32));
170 assert_eq!("-1.28E2", format!("{:.2E}", -128.5f32));
173 fn is_exponential(s: &str) -> bool {
174 s.contains("e") || s.contains("E")