v / vlib / math
Raw file | 529 loc (470 sloc) | 8.73 KB | Latest commit hash 881d0c04f
1module main
2
3import math
4import benchmark
5
6const max_iter = 1000
7
8fn test_benchmark_acos() {
9 mut x := 0.0
10 mut bmark := benchmark.start()
11 for i in 0 .. max_iter {
12 x = math.acos(0.5)
13 }
14 bmark.measure(@FN)
15}
16
17fn test_benchmark_acosh() {
18 mut x := 0.0
19 mut bmark := benchmark.start()
20 for i in 0 .. max_iter {
21 x = math.acosh(1.5)
22 }
23 bmark.measure(@FN)
24}
25
26fn test_benchmark_asin() {
27 mut x := 0.0
28 mut bmark := benchmark.start()
29 for i in 0 .. max_iter {
30 x = math.asin(0.5)
31 }
32 bmark.measure(@FN)
33}
34
35fn test_benchmark_asinh() {
36 mut x := 0.0
37 mut bmark := benchmark.start()
38 for i in 0 .. max_iter {
39 x = math.asinh(0.5)
40 }
41 bmark.measure(@FN)
42}
43
44fn test_benchmark_atan() {
45 mut x := 0.0
46 mut bmark := benchmark.start()
47 for i in 0 .. max_iter {
48 x = math.atan(0.5)
49 }
50 bmark.measure(@FN)
51}
52
53fn test_benchmark_atanh() {
54 mut x := 0.0
55 mut bmark := benchmark.start()
56 for i in 0 .. max_iter {
57 x = math.atanh(0.5)
58 }
59 bmark.measure(@FN)
60}
61
62fn test_benchmark_atan2() {
63 mut x := 0.0
64 mut bmark := benchmark.start()
65 for i in 0 .. max_iter {
66 x = math.atan2(0.5, 1)
67 }
68 bmark.measure(@FN)
69}
70
71fn test_benchmark_cbrt() {
72 mut x := 0.0
73 mut bmark := benchmark.start()
74 for i in 0 .. max_iter {
75 x = math.cbrt(10)
76 }
77 bmark.measure(@FN)
78}
79
80fn test_benchmark_ceil() {
81 mut x := 0.0
82 mut bmark := benchmark.start()
83 for i in 0 .. max_iter {
84 x = math.ceil(0.5)
85 }
86 bmark.measure(@FN)
87}
88
89fn test_benchmark_copysign() {
90 mut x := 0.0
91 mut bmark := benchmark.start()
92 for i in 0 .. max_iter {
93 x = math.copysign(0.5, -1.0)
94 }
95 bmark.measure(@FN)
96}
97
98fn test_benchmark_cos() {
99 mut x := 0.0
100 mut bmark := benchmark.start()
101 for i in 0 .. max_iter {
102 x = math.cos(0.5)
103 }
104 bmark.measure(@FN)
105}
106
107fn test_benchmark_cosh() {
108 mut x := 0.0
109 mut bmark := benchmark.start()
110 for i in 0 .. max_iter {
111 x = math.cosh(2.5)
112 }
113 bmark.measure(@FN)
114}
115
116fn test_benchmark_erf() {
117 mut x := 0.0
118 mut bmark := benchmark.start()
119 for i in 0 .. max_iter {
120 x = math.erf(0.5)
121 }
122 bmark.measure(@FN)
123}
124
125fn test_benchmark_erfc() {
126 mut x := 0.0
127 mut bmark := benchmark.start()
128 for i in 0 .. max_iter {
129 x = math.erfc(0.5)
130 }
131 bmark.measure(@FN)
132}
133
134fn test_benchmark_exp() {
135 mut x := 0.0
136 mut bmark := benchmark.start()
137 for i in 0 .. max_iter {
138 x = math.exp(0.5)
139 }
140 bmark.measure(@FN)
141}
142
143fn test_benchmark_expm1() {
144 mut x := 0.0
145 mut bmark := benchmark.start()
146 for i in 0 .. max_iter {
147 x = math.expm1(0.5)
148 }
149 bmark.measure(@FN)
150}
151
152fn test_benchmark_exp2() {
153 mut x := 0.0
154 mut bmark := benchmark.start()
155 for i in 0 .. max_iter {
156 x = math.exp2(0.5)
157 }
158 bmark.measure(@FN)
159}
160
161fn test_benchmark_abs() {
162 mut x := 0.0
163 mut bmark := benchmark.start()
164 for i in 0 .. max_iter {
165 x = math.abs(0.5)
166 }
167 bmark.measure(@FN)
168}
169
170fn test_benchmark_floor() {
171 mut x := 0.0
172 mut bmark := benchmark.start()
173 for i in 0 .. max_iter {
174 x = math.floor(0.5)
175 }
176 bmark.measure(@FN)
177}
178
179fn test_benchmark_max() {
180 mut x := 0.0
181 mut bmark := benchmark.start()
182 for i in 0 .. max_iter {
183 x = math.max(10, 3)
184 }
185 bmark.measure(@FN)
186}
187
188fn test_benchmark_min() {
189 mut x := 0.0
190 mut bmark := benchmark.start()
191 for i in 0 .. max_iter {
192 x = math.min(10, 3)
193 }
194 bmark.measure(@FN)
195}
196
197fn test_benchmark_mod() {
198 mut x := 0.0
199 mut bmark := benchmark.start()
200 for i in 0 .. max_iter {
201 x = math.mod(10, 3)
202 }
203 bmark.measure(@FN)
204}
205
206fn test_benchmark_frexp() {
207 mut x := 0.0
208 mut y := 0
209 mut bmark := benchmark.start()
210 for i in 0 .. max_iter {
211 x, y = math.frexp(8)
212 }
213 bmark.measure(@FN)
214}
215
216fn test_benchmark_gamma() {
217 mut x := 0.0
218 mut bmark := benchmark.start()
219 for i in 0 .. max_iter {
220 x = math.gamma(2.5)
221 }
222 bmark.measure(@FN)
223}
224
225fn test_benchmark_hypot() {
226 mut x := 0.0
227 mut bmark := benchmark.start()
228 for i in 0 .. max_iter {
229 x = math.hypot(3, 4)
230 }
231 bmark.measure(@FN)
232}
233
234fn test_benchmark_ldexp() {
235 mut x := 0.0
236 mut bmark := benchmark.start()
237 for i in 0 .. max_iter {
238 x = math.ldexp(0.5, 2)
239 }
240 bmark.measure(@FN)
241}
242
243fn test_benchmark_log_gamma() {
244 mut x := 0.0
245 mut bmark := benchmark.start()
246 for i in 0 .. max_iter {
247 x = math.log_gamma(2.5)
248 }
249 bmark.measure(@FN)
250}
251
252fn test_benchmark_log() {
253 mut x := 0.0
254 mut bmark := benchmark.start()
255 for i in 0 .. max_iter {
256 x = math.log(0.5)
257 }
258 bmark.measure(@FN)
259}
260
261fn test_benchmark_log_b() {
262 mut x := 0.0
263 mut bmark := benchmark.start()
264 for i in 0 .. max_iter {
265 x = math.log_b(0.5)
266 }
267 bmark.measure(@FN)
268}
269
270fn test_benchmark_log1p() {
271 mut x := 0.0
272 mut bmark := benchmark.start()
273 for i in 0 .. max_iter {
274 x = math.log1p(0.5)
275 }
276 bmark.measure(@FN)
277}
278
279fn test_benchmark_log10() {
280 mut x := 0.0
281 mut bmark := benchmark.start()
282 for i in 0 .. max_iter {
283 x = math.log10(0.5)
284 }
285 bmark.measure(@FN)
286}
287
288fn test_benchmark_log2() {
289 mut x := 0.0
290 mut bmark := benchmark.start()
291 for i in 0 .. max_iter {
292 x = math.log2(0.5)
293 }
294 bmark.measure(@FN)
295}
296
297fn test_benchmark_modf() {
298 mut x := 0.0
299 mut y := 0.0
300 mut bmark := benchmark.start()
301 for i in 0 .. max_iter {
302 x, y = math.modf(1.5)
303 }
304 bmark.measure(@FN)
305}
306
307fn test_benchmark_nextafter32() {
308 mut x := f32(0.0)
309 mut bmark := benchmark.start()
310 for i in 0 .. max_iter {
311 x = math.nextafter32(0.5, 1)
312 }
313 bmark.measure(@FN)
314}
315
316fn test_benchmark_nextafter64() {
317 mut x := 0.0
318 mut bmark := benchmark.start()
319 for i in 0 .. max_iter {
320 x = math.nextafter(0.5, 1)
321 }
322 bmark.measure(@FN)
323}
324
325fn test_benchmark_pow_int() {
326 mut x := 0.0
327 mut bmark := benchmark.start()
328 for i in 0 .. max_iter {
329 x = math.pow(2, 2)
330 }
331 bmark.measure(@FN)
332}
333
334fn test_benchmark_pow_frac() {
335 mut x := 0.0
336 mut bmark := benchmark.start()
337 for i in 0 .. max_iter {
338 x = math.pow(2.5, 1.5)
339 }
340 bmark.measure(@FN)
341}
342
343fn test_benchmark_pow10_pos() {
344 mut x := 0.0
345 mut bmark := benchmark.start()
346 for i in 0 .. max_iter {
347 x = math.pow10(300)
348 }
349 bmark.measure(@FN)
350}
351
352fn test_benchmark_pow10_neg() {
353 mut x := 0.0
354 mut bmark := benchmark.start()
355 for i in 0 .. max_iter {
356 x = math.pow10(-300)
357 }
358 bmark.measure(@FN)
359}
360
361fn test_benchmark_round() {
362 mut x := 0.0
363 mut bmark := benchmark.start()
364 for i in 0 .. max_iter {
365 x = math.round(-2.5)
366 }
367 bmark.measure(@FN)
368}
369
370fn test_benchmark_round_to_even() {
371 mut x := 0.0
372 mut bmark := benchmark.start()
373 for i in 0 .. max_iter {
374 x = math.round_to_even(-2.5)
375 }
376 bmark.measure(@FN)
377}
378
379fn test_benchmark_signbit() {
380 mut x := false
381 mut bmark := benchmark.start()
382 for i in 0 .. max_iter {
383 x = math.signbit(2.5)
384 }
385 bmark.measure(@FN)
386}
387
388fn test_benchmark_sin() {
389 mut x := 0.0
390 mut bmark := benchmark.start()
391 for i in 0 .. max_iter {
392 x = math.sin(0.5)
393 }
394 bmark.measure(@FN)
395}
396
397fn test_benchmark_sincos() {
398 mut x := 0.0
399 mut y := 0.0
400 mut bmark := benchmark.start()
401 for i in 0 .. max_iter {
402 x, y = math.sincos(0.5)
403 }
404 bmark.measure(@FN)
405}
406
407fn test_benchmark_sinh() {
408 mut x := 0.0
409 mut bmark := benchmark.start()
410 for i in 0 .. max_iter {
411 x = math.sinh(2.5)
412 }
413 bmark.measure(@FN)
414}
415
416fn test_benchmark_sqrt_indirect() {
417 mut x, y := 0.0, 10.0
418 f := math.sqrt
419 mut bmark := benchmark.start()
420 for i in 0 .. max_iter {
421 x += f(y)
422 }
423 bmark.measure(@FN)
424}
425
426fn test_benchmark_sqrt_latency() {
427 mut x := 10.0
428 mut bmark := benchmark.start()
429 for i in 0 .. max_iter {
430 x = math.sqrt(x)
431 }
432 bmark.measure(@FN)
433}
434
435fn test_benchmark_sqrt_indirect_latency() {
436 mut x := 10.0
437 f := math.sqrt
438 mut bmark := benchmark.start()
439 for i in 0 .. max_iter {
440 x = f(x)
441 }
442 bmark.measure(@FN)
443}
444
445fn is_prime(i int) bool {
446 // yes, this is a dumb way to write this code,
447 // but calling sqrt repeatedly in this way demonstrates
448 // the benefit of using a direct sqrt instruction on systems
449 // that have one, whereas the obvious loop seems not to
450 // demonstrate such a benefit.
451 for j := 2; f64(j) <= math.sqrt(f64(i)); j++ {
452 if i % j == 0 {
453 return false
454 }
455 }
456 return true
457}
458
459fn test_benchmark_sqrt_prime() {
460 mut x := false
461 mut bmark := benchmark.start()
462 for i in 0 .. max_iter {
463 x = is_prime(100003)
464 }
465 bmark.measure(@FN)
466}
467
468fn test_benchmark_tan() {
469 mut x := 0.0
470 mut bmark := benchmark.start()
471 for i in 0 .. max_iter {
472 x = math.tan(0.5)
473 }
474 bmark.measure(@FN)
475}
476
477fn test_benchmark_tanh() {
478 mut x := 0.0
479 mut bmark := benchmark.start()
480 for i in 0 .. max_iter {
481 x = math.tanh(2.5)
482 }
483 bmark.measure(@FN)
484}
485
486fn test_benchmark_trunc() {
487 mut x := 0.0
488 mut bmark := benchmark.start()
489 for i in 0 .. max_iter {
490 x = math.trunc(0.5)
491 }
492 bmark.measure(@FN)
493}
494
495fn test_benchmark_f64_bits() {
496 mut x := u64(0)
497 mut bmark := benchmark.start()
498 for i in 0 .. max_iter {
499 x = math.f64_bits(-2.5)
500 }
501 bmark.measure(@FN)
502}
503
504fn test_benchmark_f64_from_bits() {
505 mut x := 0.0
506 mut bmark := benchmark.start()
507 for i in 0 .. max_iter {
508 x = math.f64_from_bits(5)
509 }
510 bmark.measure(@FN)
511}
512
513fn test_benchmark_f32_bits() {
514 mut x := u32(0)
515 mut bmark := benchmark.start()
516 for i in 0 .. max_iter {
517 x = math.f32_bits(-2.5)
518 }
519 bmark.measure(@FN)
520}
521
522fn test_benchmark_f32_from_bits() {
523 mut x := f32(0.0)
524 mut bmark := benchmark.start()
525 for i in 0 .. max_iter {
526 x = math.f32_from_bits(5)
527 }
528 bmark.measure(@FN)
529}