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