1 | fn test_float_decl() { |
2 | // z := 1f |
3 | // assert z > 0 |
4 | x1 := 1e10 |
5 | x2 := -2e16 |
6 | x3 := 1e-15 |
7 | x4 := -9e-4 |
8 | assert typeof(x1).name == 'f64' |
9 | assert typeof(x2).name == 'f64' |
10 | assert typeof(x3).name == 'f64' |
11 | assert typeof(x4).name == 'f64' |
12 | x5 := 4e108 |
13 | x6 := -7e99 |
14 | x7 := 3e-205 |
15 | x8 := -6e-147 |
16 | assert typeof(x5).name == 'f64' |
17 | assert typeof(x6).name == 'f64' |
18 | assert typeof(x7).name == 'f64' |
19 | assert typeof(x8).name == 'f64' |
20 | x9 := 312874834.77 |
21 | x10 := -22399994.06 |
22 | x11 := 0.0000000019 |
23 | x12 := -0.00000000008 |
24 | assert typeof(x9).name == 'f64' |
25 | assert typeof(x10).name == 'f64' |
26 | assert typeof(x11).name == 'f64' |
27 | assert typeof(x12).name == 'f64' |
28 | x13 := 34234234809890890898903213154353453453253253243432413232228908902183918392183902432432438980380123021983901392183921389083913890389089031.0 |
29 | x14 := -39999999999999999999222212128182813294989082302832183928343325325233253242312331324392839238239829389038097438248932789371837218372837293.8 |
30 | x15 := 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 |
31 | x16 := -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004 |
32 | assert typeof(x13).name == 'f64' |
33 | assert typeof(x14).name == 'f64' |
34 | assert typeof(x15).name == 'f64' |
35 | assert typeof(x16).name == 'f64' |
36 | } |
37 | |
38 | fn test_f32_equal_operator() { |
39 | b := f32(1.0) |
40 | mut a := f32(1.0) |
41 | a += 0.0000019073486328125 |
42 | assert a != b |
43 | a -= 0.0000019073486328125 |
44 | assert a == b |
45 | assert -1 == 1 * -1 |
46 | assert -1.0 == 1.0 * -1.0 |
47 | a = 1 |
48 | a += 0.0000019073486328125 |
49 | a -= 0.0000019073486328125 |
50 | assert a == f32(1.0) |
51 | a += 0.000001 |
52 | assert !(a < f32(1)) |
53 | assert !(a <= f32(1)) |
54 | assert a > f32(1) |
55 | assert a >= 1 |
56 | assert a != 1 |
57 | f := 1.2 |
58 | ab := int(f) |
59 | assert ab == 1 |
60 | e := f32(-1.602176634e-19) |
61 | m := f32(9.1093837015e-31) |
62 | assert e < m |
63 | assert e <= m |
64 | assert e != m |
65 | assert !(e == m) |
66 | assert m >= e |
67 | assert m > e |
68 | } |
69 | |
70 | fn test_f64_equal_operator() { |
71 | b := 1.0 |
72 | mut a := 1.0 |
73 | a += 0.0000019073486328125 |
74 | assert a != b |
75 | a -= 0.0000019073486328125 |
76 | assert a == b |
77 | e := -1.602176634e-19 |
78 | m := 9.1093837015e-31 |
79 | assert e < m |
80 | assert e <= m |
81 | assert e != m |
82 | assert !(e == m) |
83 | assert m >= e |
84 | assert m > e |
85 | } |
86 | |
87 | fn test_f64_eq_epsilon() { |
88 | a := 1.662248544459347e308 |
89 | b := 1.662248544459348e308 |
90 | x := 1.662248544459352e308 |
91 | assert a != b |
92 | assert a.eq_epsilon(b) |
93 | assert b.eq_epsilon(a) |
94 | assert (-a).eq_epsilon(-b) |
95 | assert (-b).eq_epsilon(-a) |
96 | assert !a.eq_epsilon(x) |
97 | assert !x.eq_epsilon(a) |
98 | assert !a.eq_epsilon(-b) |
99 | assert !(-a).eq_epsilon(b) |
100 | c := 1.5367748374385438503 |
101 | d := -1.5367748374385447257 |
102 | z := 1.5367748378943546 |
103 | assert c != -d |
104 | assert c.eq_epsilon(-d) |
105 | assert d.eq_epsilon(-c) |
106 | assert !c.eq_epsilon(z) |
107 | assert !z.eq_epsilon(c) |
108 | e := 2.531434251587394233e-308 |
109 | f := 2.531434251587395675e-308 |
110 | y := 2.531434251587398934e-308 |
111 | assert e != f |
112 | assert e.eq_epsilon(f) |
113 | assert (-f).eq_epsilon(-e) |
114 | assert !e.eq_epsilon(y) |
115 | assert !(-y).eq_epsilon(-e) |
116 | } |
117 | |
118 | fn test_f32_eq_epsilon() { |
119 | a := f32(3.244331e38) |
120 | b := f32(3.244332e38) |
121 | x := f32(3.244338e38) |
122 | assert a != b |
123 | assert a.eq_epsilon(b) |
124 | assert b.eq_epsilon(a) |
125 | assert (-a).eq_epsilon(-b) |
126 | assert (-b).eq_epsilon(-a) |
127 | assert !a.eq_epsilon(x) |
128 | assert !(-x).eq_epsilon(-a) |
129 | assert !a.eq_epsilon(-b) |
130 | assert !(-a).eq_epsilon(b) |
131 | c := f32(0.9546742) |
132 | d := f32(-0.9546745) |
133 | z := f32(0.9546754) |
134 | assert c != -d |
135 | assert c.eq_epsilon(-d) |
136 | assert d.eq_epsilon(-c) |
137 | assert !c.eq_epsilon(z) |
138 | assert !z.eq_epsilon(c) |
139 | e := f32(-1.5004390e-38) |
140 | f := f32(-1.5004395e-38) |
141 | y := f32(-1.5004409e-38) |
142 | assert e != f |
143 | assert e.eq_epsilon(f) |
144 | assert (-f).eq_epsilon(-e) |
145 | assert !e.eq_epsilon(y) |
146 | assert !(-y).eq_epsilon(-e) |
147 | } |
148 | |
149 | fn test_float_point_formatting_rounding() { |
150 | float_1 := 462.18 |
151 | float_2 := 45.02227 |
152 | float_3 := 238.5 |
153 | float_4 := 239.5 |
154 | |
155 | assert '${float_1:0.0f}' == '462' |
156 | assert '${float_2:0.0f}' == '45' |
157 | assert '${float_3:0.0f}' == '239' |
158 | assert '${float_4:0.0f}' == '240' |
159 | // |
160 | // |
161 | assert '${239.5555551:0.0f}' == '240' |
162 | assert '${239.5555551:0.1f}' == '239.6' |
163 | assert '${239.5555551:0.2f}' == '239.56' |
164 | assert '${239.5555551:0.3f}' == '239.556' |
165 | assert '${239.5555551:0.4f}' == '239.5556' |
166 | assert '${239.5555551:0.5f}' == '239.55556' |
167 | assert '${239.5555551:0.6f}' == '239.555555' |
168 | assert '${239.5555551:0.7f}' == '239.5555551' |
169 | assert '${239.5555551:0.8f}' == '239.55555510' |
170 | assert '${239.5555551:0.9f}' == '239.555555100' |
171 | assert '${239.5555551:0.10f}' == '239.5555551000' |
172 | assert '${239.5555551:0.11f}' == '239.55555510000' |
173 | // |
174 | assert '${239.5:0.0f}' == '240' |
175 | assert '${239.55:0.1f}' == '239.6' |
176 | assert '${239.555:0.2f}' == '239.56' |
177 | assert '${239.5555:0.3f}' == '239.555' // Note: 5 ? |
178 | assert '${239.55555:0.4f}' == '239.5556' |
179 | assert '${239.555555:0.5f}' == '239.55555' // Note: 5 ? |
180 | assert '${239.5555555:0.6f}' == '239.555556' // after this, it is all ending in 6 |
181 | assert '${239.55555555:0.7f}' == '239.5555556' |
182 | assert '${239.555555555:0.8f}' == '239.55555556' |
183 | assert '${239.5555555555:0.9f}' == '239.555555556' |
184 | assert '${239.55555555555:0.10f}' == '239.5555555556' |
185 | // |
186 | assert '${239.5550:0.3f}' == '239.555' |
187 | assert '${239.5551:0.3f}' == '239.555' |
188 | assert '${239.5552:0.3f}' == '239.555' |
189 | assert '${239.5553:0.3f}' == '239.555' |
190 | assert '${239.5554:0.3f}' == '239.555' |
191 | assert '${239.5555:0.3f}' == '239.555' |
192 | assert '${239.5556:0.3f}' == '239.556' // rounding at last 6 ? |
193 | assert '${239.5557:0.3f}' == '239.556' |
194 | assert '${239.5558:0.3f}' == '239.556' |
195 | assert '${239.5559:0.3f}' == '239.556' |
196 | // |
197 | assert '${239.5555551:0.6f}' == '239.555555' |
198 | assert '${239.5555552:0.6f}' == '239.555555' |
199 | assert '${239.5555553:0.6f}' == '239.555555' |
200 | assert '${239.5555554:0.6f}' == '239.555555' |
201 | assert '${239.5555555:0.6f}' == '239.555556' |
202 | assert '${239.5555556:0.6f}' == '239.555556' |
203 | assert '${239.5555557:0.6f}' == '239.555556' |
204 | assert '${239.5555558:0.6f}' == '239.555556' |
205 | assert '${239.5555559:0.6f}' == '239.555556' |
206 | // |
207 | assert '${239.55555555555:0.10f}' == '239.5555555556' |
208 | assert '${239.55555555555:0.9f}' == '239.555555556' |
209 | assert '${239.55555555555:0.8f}' == '239.55555556' |
210 | assert '${239.55555555555:0.7f}' == '239.5555556' |
211 | assert '${239.55555555555:0.6f}' == '239.555556' |
212 | assert '${239.55555555555:0.5f}' == '239.55556' |
213 | assert '${239.55555555555:0.4f}' == '239.5556' |
214 | assert '${239.55555555555:0.3f}' == '239.556' |
215 | assert '${239.55555555555:0.2f}' == '239.56' |
216 | assert '${239.55555555555:0.1f}' == '239.6' |
217 | assert '${239.55555555555:0.0f}' == '240' |
218 | // |
219 | assert '${-239.55555555555:0.10f}' == '-239.5555555556' |
220 | assert '${-239.55555555555:0.9f}' == '-239.555555556' |
221 | assert '${-239.55555555555:0.8f}' == '-239.55555556' |
222 | assert '${-239.55555555555:0.7f}' == '-239.5555556' |
223 | assert '${-239.55555555555:0.6f}' == '-239.555556' |
224 | assert '${-239.55555555555:0.5f}' == '-239.55556' |
225 | assert '${-239.55555555555:0.4f}' == '-239.5556' |
226 | assert '${-239.55555555555:0.3f}' == '-239.556' |
227 | assert '${-239.55555555555:0.2f}' == '-239.56' |
228 | assert '${-239.55555555555:0.1f}' == '-239.6' |
229 | assert '${-239.55555555555:0.0f}' == '-240' |
230 | } |
231 | |
232 | fn test_float_zero_str() { |
233 | f1 := f32(0.0) |
234 | f2 := 0.0 |
235 | assert f1.str() == '0.0' |
236 | assert '${f1}' == '0.0' |
237 | assert f2.str() == '0.0' |
238 | assert '${f2}' == '0.0' |
239 | } |