1 | module main |
2 | |
3 | import math |
4 | import benchmark |
5 | |
6 | const max_iter = 1000 |
7 | |
8 | fn 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 | |
17 | fn 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 | |
26 | fn 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 | |
35 | fn 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 | |
44 | fn 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 | |
53 | fn 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 | |
62 | fn 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 | |
71 | fn 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 | |
80 | fn 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 | |
89 | fn 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 | |
98 | fn 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 | |
107 | fn 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 | |
116 | fn 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 | |
125 | fn 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 | |
134 | fn 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 | |
143 | fn 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 | |
152 | fn 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 | |
161 | fn 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 | |
170 | fn 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 | |
179 | fn 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 | |
188 | fn 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 | |
197 | fn 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 | |
206 | fn 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 | |
216 | fn 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 | |
225 | fn 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 | |
234 | fn 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 | |
243 | fn 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 | |
252 | fn 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 | |
261 | fn 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 | |
270 | fn 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 | |
279 | fn 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 | |
288 | fn 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 | |
297 | fn 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 | |
307 | fn 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 | |
316 | fn 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 | |
325 | fn 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 | |
334 | fn 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 | |
343 | fn 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 | |
352 | fn 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 | |
361 | fn 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 | |
370 | fn 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 | |
379 | fn 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 | |
388 | fn 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 | |
397 | fn 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 | |
407 | fn 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 | |
416 | fn 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 | |
426 | fn 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 | |
435 | fn 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 | |
445 | fn 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 | |
459 | fn 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 | |
468 | fn 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 | |
477 | fn 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 | |
486 | fn 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 | |
495 | fn 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 | |
504 | fn 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 | |
513 | fn 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 | |
522 | fn 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 | } |