v / vlib / builtin
Raw file | 239 loc (232 sloc) | 7.01 KB | Latest commit hash 017ace6ea
1fn 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
38fn 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
70fn 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
87fn 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
118fn 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
149fn 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
232fn 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}