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