@@ -24,6 +24,66 @@ fn test_format_f64() {
2424 assert_eq ! ( "1234.6" , format!( "{:.1?}" , 1234.56789f64 ) ) ;
2525}
2626
27+ #[ test]
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 ) ) ;
55+
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 ) ) ;
70+
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 ) ) ;
85+ }
86+
2787#[ test]
2888fn test_format_f32 ( ) {
2989 assert_eq ! ( "1" , format!( "{:.0}" , 1.0f32 ) ) ;
@@ -50,6 +110,66 @@ fn test_format_f32() {
50110 assert_eq ! ( "1234.6" , format!( "{:.1?}" , 1234.56789f32 ) ) ;
51111}
52112
113+ #[ test]
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 ) ) ;
141+
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 ) ) ;
156+
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 ) ) ;
171+ }
172+
53173fn is_exponential ( s : & str ) -> bool {
54174 s. contains ( "e" ) || s. contains ( "E" )
55175}
0 commit comments