chiark / gitweb /
@@@ doc 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
228;; Check NaN truncation.
229
230errmask = 0
231f = QNAN
232m = 090cad8d 8de42000 00000000
233z = 7ff84865 6c6c6f21
234err = OK
235
236errmask = 0
237f = QNAN
238m = 090cad8d 8de43000
239z = 00000000 00000000
240err = INEXACT
241
242errmask = 0
243f = QNAN
244m = 090cad8d 8de42000 00000001
245z = 00000000 00000000
246err = INEXACT
247
248round = posinf
249errmask = INEXACT
250f = QNAN
251m = 090cad8d 8de43fff
252z = 7ff84865 6c6c6f21
253err = INEXACT
254
255;; Check subnormal underflow.
256
257errmask = 0
258f = 0
259e = -1073
260m = 80000000
261z = 00000000 00000001
262err = OK
263
264errmask = UFLOW | INEXACT
265f = 0
266e = -1074
267m = 80000000
268z = 00000000 00000000
269err = UFLOW | INEXACT
270
271round = projinf
272errmask = UFLOW | INEXACT
273f = 0
274e = -1074
275m = 80000000
276z = 00000000 00000001
277err = INEXACT
278
279round = projinf
280errmask = UFLOW | INEXACT
281f = 0
282e = -1075
283m = ffffffff
284z = 00000000 00000000
285err = UFLOW | INEXACT
286
287;; Check ordinary rounding.
288
289errmask = INEXACT
290f = NEG
291e = 0
292m = 22222222 22223800
293z = bfe44444 44444447
294err = OK
295
296errmask = 0
297f = NEG
298e = 0
299m = 22222222 22223801
300z = 00000000 00000000
301err = INEXACT
302
303round = nearest-even
304errmask = INEXACT
305f = NEG
306e = 0
307m = 22222222 22223801
308z = bfe44444 44444447
309err = INEXACT
310
311round = nearest-even
312errmask = INEXACT
313f = NEG
314e = 0
315m = 22222222 22223bff
316z = bfe44444 44444447
317err = INEXACT
318
319round = nearest-even
320errmask = INEXACT
321f = NEG
322e = 0
323m = 22222222 22223c00
324z = bfe44444 44444448
325err = INEXACT
326
327round = nearest-even
328errmask = INEXACT
329f = NEG
330e = 0
331m = 22222222 22223fff
332z = bfe44444 44444448
333err = INEXACT
334
335round = posinf
336errmask = INEXACT
337f = NEG
338e = 0
339m = 22222222 22223fff
340z = bfe44444 44444447
341err = INEXACT
342
343;; Check overflow and infinity.
344
345errmask = INEXACT | OFLOW
346f = 0
347e = 1024
348m = ffffffff fffff800
349z = 7fefffff ffffffff
350err = OK
351
352round = nearest-even
353errmask = INEXACT | OFLOW
354f = 0
355e = 1024
356m = ffffffff fffff801
357z = 7fefffff ffffffff
358err = INEXACT
359
360round = nearest-even
361errmask = INEXACT | OFLOW
362f = 0
363e = 1024
364m = ffffffff fffffbff
365z = 7fefffff ffffffff
366err = INEXACT
367
368round = nearest-even
369errmask = INEXACT | OFLOW
370f = 0
371e = 1024
372m = ffffffff fffffc00
373z = 7ff00000 00000000
374err = INEXACT | OFLOW
375
376round = neginf
377errmask = INEXACT | OFLOW
378f = 0
379e = 4096
380m = ffffffff
381z = 7fefffff ffffffff
c752173d 382err = INEXACT | OFLOW
b1a20bee
MW
383
384[encf128]
385
386;; This was a randomized test that caught a bug.
387f = NEG
388e = 4400
389m = cd1c3727 b1c7bb96 c3668568
390z = d12e9a38 6e4f638f 772d86cd 0ad00000
391
392;;;--------------------------------------------------------------------------
393;;; Native format conversions.
394
395[encflt]
396
397f = ZERO
398z = 0.0
399
400@assume = negz
401f = NEG | ZERO
402z = -0.0
403
404@assume = inf
405f = INF
406z = #+inf
407
408@assume = inf
409f = NEG | INF
410z = #-inf
411
412f = NEG
413e = 0
414m = a0000000 00000000
415z = -0.625
416
417@assume = prec24
418f = 0
419e = 3
420m = c90fdb00
421z = 6.2831854820251465
422
423@assume = stdc-nan
424f = QNAN
425m = #empty
426z = #nan
427err = INEXACT
428
429@assume = ieee
430f = QNAN
431m = #empty
432z = #nan
433
434[decflt]
435
436x = 0.0
437f = ZERO
438
439@assume = negz
440x = -0.0
441f = NEG | ZERO
442
443x = -0.625
444f = NEG
445e = 0
446m = a0000000
447
448@assume = prec24
449x = 6.2831853
450f = 0
451e = 3
452m = c90fdb00
453
454@assume = inf
455x = #+inf
456f = INF
457
458@assume = inf
459x = #-inf
460f = NEG | INF
461
462@assume = stdc-nan
463x = #nan
464f = QNAN
465err = INEXACT
466
467@assume = ieee
468x = #nan
469f = QNAN
470m = 00000000 ; maybe
471err = OK
472
473[encdbl]
474
475f = ZERO
476z = 0.0
477
478@assume = negz
479f = NEG | ZERO
480z = -0.0
481
482@assume = inf
483f = INF
484z = #+inf
485
486@assume = inf
487f = NEG | INF
488z = #-inf
489
490f = NEG
491e = 0
492m = a0000000 00000000
493z = -0.625
494
495@assume = prec53
496f = 0
497e = 3
498m = c90fdaa2 2168c000
499z = 6.283185307179586
500
501@assume = stdc-nan
502f = QNAN
503m = #empty
504z = #nan
505err = INEXACT
506
507@assume = ieee
508f = QNAN
509m = #empty
510z = #nan
511
512[decdbl]
513
514x = 0.0
515f = ZERO
516
517@assume = negz
518x = -0.0
519f = NEG | ZERO
520
521x = -0.625
522f = NEG
523e = 0
524m = a0000000 00000000
525
526@assume = prec53
527x = 6.283185307179586
528f = 0
529e = 3
530m = c90fdaa2 2168c000
531
532@assume = inf
533x = #+inf
534f = INF
535
536@assume = inf
537x = #-inf
538f = NEG | INF
539
540@assume = stdc-nan
541x = #nan
542f = QNAN
543err = INEXACT
544
545@assume = ieee
546x = #nan
547f = QNAN
548m = 00000000 00000000 ; maybe
549err = OK
550
551;;;--------------------------------------------------------------------------