]> git.lizzy.rs Git - rust.git/blob - library/core/tests/fmt/float.rs
Auto merge of #107843 - bjorn3:sync_cg_clif-2023-02-09, r=bjorn3
[rust.git] / library / core / tests / fmt / float.rs
1 #[test]
2 fn test_format_f64() {
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));
15
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));
25 }
26
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
87 #[test]
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));
101
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));
111 }
112
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
173 fn is_exponential(s: &str) -> bool {
174     s.contains("e") || s.contains("E")
175 }