chiark / gitweb /
@@@ more mess
[mLib] / utils / t / fltfmt.tests
1 ;;; -*-conf-*-
2 ;;; Tests for floating-point conversions
3
4 ;;;--------------------------------------------------------------------------
5 [round]
6
7 ;; Some easy special cases.
8
9 round = nearest-even
10 n = 16
11 f = ZERO
12 ff = ZERO
13 err = OK
14
15 round = nearest-even
16 n = 16
17 f = INF | NEG
18 ff = INF | NEG
19 err = OK
20
21 ;; Check that we round at the right bit.
22
23 round = nearest-even
24 n = 12
25 f = 0
26 e = 0
27 m = fff00000
28 ff = 0
29 ee = 0
30 mm = fff00000
31 err = OK
32
33 round = nearest-even
34 n = 12
35 f = 0
36 e = 0
37 m = ffe80000
38 ff = 0
39 ee = 0
40 mm = ffe00000
41 err = INEXACT
42
43 round = nearest-even
44 n = 12
45 f = 0
46 e = 0
47 m = fff80000
48 ff = 0
49 ee = 1
50 mm = 80000000
51 err = INEXACT
52
53 ;; Check rounding of multi-word fractions.
54
55 round = nearest-even
56 n = 76
57 f = 0
58 e = 12
59 m = ffffffff ffffffff fff00000 00000000
60 ff = 0
61 ee = 12
62 mm = ffffffff ffffffff fff00000
63 err = OK
64
65 round = nearest-even
66 n = 76
67 f = 0
68 e = 0
69 m = ffffffff fffeffff fff00000 00000001
70 ff = 0
71 ee = 0
72 mm = ffffffff fffeffff fff00000
73 err = INEXACT
74
75 round = nearest-even
76 n = 76
77 f = 0
78 e = 0
79 m = ffffffff ffffffff ffe80000 00000000
80 ff = 0
81 ee = 0
82 mm = ffffffff ffffffff ffe00000
83 err = INEXACT
84
85 round = nearest-even
86 n = 76
87 f = 0
88 e = 0
89 m = ffffffff fffeffff ffe80000 00000001
90 ff = 0
91 ee = 0
92 mm = ffffffff fffeffff fff00000
93 err = INEXACT
94
95 round = nearest-even
96 n = 76
97 f = 0
98 e = 0
99 m = ffffffff fffeffff fff80000 00000000
100 ff = 0
101 ee = 0
102 mm = ffffffff ffff0000 00000000
103 err = INEXACT
104
105 ;; Check carry up to next exponent.
106
107 round = nearest-even
108 n = 76
109 f = 0
110 e = -18
111 m = ffffffff ffffffff fff80000 00000000
112 ff = 0
113 ee = -17
114 mm = 80000000 00000000 00000000
115 err = INEXACT
116
117 ;; Check rounding modes.
118
119 round = zero
120 n = 12
121 f = 0
122 e = 0
123 m = bfffffff
124 ff = 0
125 ee = 0
126 mm = bff00000
127 err = INEXACT
128
129 round = zero
130 n = 12
131 f = NEG
132 e = 0
133 m = bfffffff
134 ff = NEG
135 ee = 0
136 mm = bff00000
137 err = INEXACT
138
139 round = neginf
140 n = 12
141 f = 0
142 e = 0
143 m = bfffffff
144 ff = 0
145 ee = 0
146 mm = bff00000
147 err = INEXACT
148
149 round = neginf
150 n = 12
151 f = NEG
152 e = 0
153 m = bfffffff
154 ff = NEG
155 ee = 0
156 mm = c0000000
157 err = INEXACT
158
159 ;; Check inexactness detection.
160
161 round = nearest-even
162 n = 12
163 f = 0
164 e = 0
165 m = ffe00001
166 ff = 0
167 ee = 0
168 mm = ffe00000
169 err = INEXACT
170
171 round = nearest-even
172 n = 12
173 f = 0
174 e = 0
175 m = fff00001
176 ff = 0
177 ee = 0
178 mm = fff00000
179 err = INEXACT
180
181 ;; Check rounding at word boundaries.
182
183 round = nearest-even
184 n = 32
185 f = 0
186 e = 0
187 m = 80000001 00000001
188 ff = 0
189 ee = 0
190 mm = 80000001
191 err = INEXACT
192
193 round = nearest-even
194 n = 32
195 f = 0
196 e = 0
197 m = 80000000 80000000
198 ff = 0
199 ee = 0
200 mm = 80000000
201 err = INEXACT
202
203 round = nearest-even
204 n = 32
205 f = 0
206 e = 0
207 m = 80000000 80000001
208 ff = 0
209 ee = 0
210 mm = 80000001
211 err = INEXACT
212
213 round = nearest-even
214 n = 32
215 f = 0
216 e = 0
217 m = 80000001 80000000
218 ff = 0
219 ee = 0
220 mm = 80000002
221 err = INEXACT
222
223 ;;;--------------------------------------------------------------------------
224 ;;; IEEE conversions.
225
226 [encf64]
227
228 ;; NaN conversions
229
230 f = QNAN
231 m = #empty
232 z = 7ff80000 00000000
233
234 f = SNAN
235 m = #empty
236 z = 7ff00000 00000001
237 err = INEXACT
238
239 f = SNAN
240 m = 00000000 00002000
241 z = 7ff00000 00000001
242
243 f = SNAN
244 m = 00000000 00001fff
245 z = 7ff00000 00000001
246 err = INEXACT
247
248 f = SNAN
249 m = 00000000 00000000 00000001
250 z = 7ff00000 00000001
251 err = INEXACT
252
253 ;; Check NaN truncation.
254
255 errmask = 0
256 f = QNAN
257 m = 090cad8d 8de42000 00000000
258 z = 7ff84865 6c6c6f21
259 err = OK
260
261 errmask = 0
262 f = QNAN
263 m = 090cad8d 8de43000
264 z = 00000000 00000000
265 err = INEXACT
266
267 errmask = 0
268 f = QNAN
269 m = 090cad8d 8de42000 00000001
270 z = 00000000 00000000
271 err = INEXACT
272
273 round = posinf
274 errmask = INEXACT
275 f = QNAN
276 m = 090cad8d 8de43fff
277 z = 7ff84865 6c6c6f21
278 err = INEXACT
279
280 ;; Check subnormal underflow.
281
282 errmask = 0
283 f = 0
284 e = -1073
285 m = 80000000
286 z = 00000000 00000001
287 err = OK
288
289 errmask = UFLOW | INEXACT
290 f = 0
291 e = -1074
292 m = 80000000
293 z = 00000000 00000000
294 err = UFLOW | INEXACT
295
296 round = projinf
297 errmask = UFLOW | INEXACT
298 f = 0
299 e = -1074
300 m = 80000000
301 z = 00000000 00000001
302 err = INEXACT
303
304 round = projinf
305 errmask = UFLOW | INEXACT
306 f = 0
307 e = -1075
308 m = ffffffff
309 z = 00000000 00000000
310 err = UFLOW | INEXACT
311
312 ;; Check ordinary rounding.
313
314 errmask = INEXACT
315 f = NEG
316 e = 0
317 m = 22222222 22223800
318 z = bfe44444 44444447
319 err = OK
320
321 errmask = 0
322 f = NEG
323 e = 0
324 m = 22222222 22223801
325 z = 00000000 00000000
326 err = INEXACT
327
328 round = nearest-even
329 errmask = INEXACT
330 f = NEG
331 e = 0
332 m = 22222222 22223801
333 z = bfe44444 44444447
334 err = INEXACT
335
336 round = nearest-even
337 errmask = INEXACT
338 f = NEG
339 e = 0
340 m = 22222222 22223bff
341 z = bfe44444 44444447
342 err = INEXACT
343
344 round = nearest-even
345 errmask = INEXACT
346 f = NEG
347 e = 0
348 m = 22222222 22223c00
349 z = bfe44444 44444448
350 err = INEXACT
351
352 round = nearest-even
353 errmask = INEXACT
354 f = NEG
355 e = 0
356 m = 22222222 22223fff
357 z = bfe44444 44444448
358 err = INEXACT
359
360 round = posinf
361 errmask = INEXACT
362 f = NEG
363 e = 0
364 m = 22222222 22223fff
365 z = bfe44444 44444447
366 err = INEXACT
367
368 ;; Check overflow and infinity.
369
370 errmask = INEXACT | OFLOW
371 f = 0
372 e = 1024
373 m = ffffffff fffff800
374 z = 7fefffff ffffffff
375 err = OK
376
377 round = nearest-even
378 errmask = INEXACT | OFLOW
379 f = 0
380 e = 1024
381 m = ffffffff fffff801
382 z = 7fefffff ffffffff
383 err = INEXACT
384
385 round = nearest-even
386 errmask = INEXACT | OFLOW
387 f = 0
388 e = 1024
389 m = ffffffff fffffbff
390 z = 7fefffff ffffffff
391 err = INEXACT
392
393 round = nearest-even
394 errmask = INEXACT | OFLOW
395 f = 0
396 e = 1024
397 m = ffffffff fffffc00
398 z = 7ff00000 00000000
399 err = INEXACT | OFLOW
400
401 round = neginf
402 errmask = INEXACT | OFLOW
403 f = 0
404 e = 4096
405 m = ffffffff
406 z = 7fefffff ffffffff
407 err = INEXACT | OFLOW
408
409 [encf128]
410
411 ;; This was a randomized test that caught a bug.
412 f = NEG
413 e = 4400
414 m = cd1c3727 b1c7bb96 c3668568
415 z = d12e9a38 6e4f638f 772d86cd 0ad00000
416
417 ;;;--------------------------------------------------------------------------
418 ;;; Native format conversions.
419
420 [encflt]
421
422 f = ZERO
423 z = 0.0
424
425 @assume = negz
426 f = NEG | ZERO
427 z = -0.0
428
429 @assume = inf
430 f = INF
431 z = #+inf
432
433 @assume = inf
434 f = NEG | INF
435 z = #-inf
436
437 f = NEG
438 e = 0
439 m = a0000000 00000000
440 z = -0.625
441
442 @assume = prec24
443 f = 0
444 e = 3
445 m = c90fdb00
446 z = 6.2831853
447
448 @assume = stdc-nan
449 f = QNAN
450 m = #empty
451 z = #nan
452 err = INEXACT
453
454 @assume = ieee
455 f = QNAN
456 m = #empty
457 z = #nan
458
459 [decflt]
460
461 x = 0.0
462 f = ZERO
463
464 @assume = negz
465 x = -0.0
466 f = NEG | ZERO
467
468 x = -0.625
469 f = NEG
470 e = 0
471 m = a0000000
472
473 @assume = prec24
474 x = 6.2831853
475 f = 0
476 e = 3
477 m = c90fdb00
478
479 @assume = inf
480 x = #+inf
481 f = INF
482
483 @assume = inf
484 x = #-inf
485 f = NEG | INF
486
487 @assume = stdc-nan
488 x = #nan
489 f = QNAN
490 err = INEXACT
491
492 @assume = ieee
493 x = #nan
494 f = QNAN
495 ;; m = ... something
496 err = OK
497
498 [encdbl]
499
500 f = ZERO
501 z = 0.0
502
503 @assume = negz
504 f = NEG | ZERO
505 z = -0.0
506
507 @assume = inf
508 f = INF
509 z = #+inf
510
511 @assume = inf
512 f = NEG | INF
513 z = #-inf
514
515 f = NEG
516 e = 0
517 m = a0000000 00000000
518 z = -0.625
519
520 @assume = prec53
521 f = 0
522 e = 3
523 m = c90fdaa2 2168c000
524 z = 6.283185307179586
525
526 @assume = stdc-nan
527 f = QNAN
528 m = #empty
529 z = #nan
530 err = INEXACT
531
532 @assume = ieee
533 f = QNAN
534 m = #empty
535 z = #nan
536 err = OK
537
538 [decdbl]
539
540 x = 0.0
541 f = ZERO
542
543 @assume = negz
544 x = -0.0
545 f = NEG | ZERO
546
547 x = -0.625
548 f = NEG
549 e = 0
550 m = a0000000 00000000
551
552 @assume = prec53
553 x = 6.283185307179586
554 f = 0
555 e = 3
556 m = c90fdaa2 2168c000
557
558 @assume = inf
559 x = #+inf
560 f = INF
561
562 @assume = inf
563 x = #-inf
564 f = NEG | INF
565
566 @assume = stdc-nan
567 x = #nan
568 f = QNAN
569 err = INEXACT
570
571 @assume = ieee
572 x = #nan
573 f = QNAN
574 ;; m = ... something
575 err = OK
576
577 ;;;--------------------------------------------------------------------------
578 ;;; Direct conversions.
579
580 [f32btoflt]
581
582 x = 00000000
583 z = 0.0
584
585 @assume = negz
586 x = 80000000
587 z = -0.0
588
589 @assume = inf
590 x = 7f800000
591 z = #+inf
592
593 @assume = inf
594 x = ff800000
595 z = #-inf
596
597 @assume = stdc-nan | ieee
598 x = 7fc00000
599 z = #nan
600
601 @assume = stdc-nan | ieee
602 x = 7fa00000
603 z = #nan
604
605 x = 3f800000
606 z = 1.0
607
608 @assume = prec24
609 x = 40c90fdb
610 z = 6.2831853
611
612 [f32ltoflt]
613
614 x = 10c12549
615 z = 678929
616
617 [flttof32b]
618
619 x = 678929
620 z = 4925c110
621
622 @assume = prec24
623 x = 6.2831853
624 z = 40c90fdb
625
626 [flttof32l]
627
628 x = 678929
629 z = 10c12549
630
631 [dbltof64b]
632
633 x = 0.0
634 z = 00000000 00000000
635
636 x = -2964135146
637 z = c1e615a3 9d400000
638
639 @assume = prec53
640 x = 6.283185307179586
641 z = 401921fb 54442d18
642
643 [dbltof64l]
644
645 x = -2964135146
646 z = 0000409d a315e6c1
647
648 [f64btodbl]
649
650 x = c1e615a3 9d400000
651 z = -2964135146
652
653 [f64ltodbl]
654
655 x = 0000409d a315e6c1
656 z = -2964135146
657
658 ;;;--------------------------------------------------------------------------