blob: 74599be1975f660b81ebf80e62752b4bcedce4d5 [file] [log] [blame]
Raymond Hettinger7c85fa42004-07-01 11:01:35 +00001------------------------------------------------------------------------
2-- decimal64.decTest -- decimal eight-byte format testcases --
3-- Copyright (c) IBM Corporation, 2000, 2003. All rights reserved. --
4------------------------------------------------------------------------
5-- Please see the document "General Decimal Arithmetic Testcases" --
6-- at http://www2.hursley.ibm.com/decimal for the description of --
7-- these testcases. --
8-- --
9-- These testcases are experimental ('beta' versions), and they --
10-- may contain errors. They are offered on an as-is basis. In --
11-- particular, achieving the same results as the tests here is not --
12-- a guarantee that an implementation complies with any Standard --
13-- or specification. The tests are not exhaustive. --
14-- --
15-- Please send comments, suggestions, and corrections to the author: --
16-- Mike Cowlishaw, IBM Fellow --
17-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
18-- mfc@uk.ibm.com --
19------------------------------------------------------------------------
20version: 2.28
21
22-- This set of tests is for the eight-byte concrete representation.
23-- Its characteristics are:
24--
25-- 1 bit sign
26-- 5 bits combination field
27-- 8 bits exponent continuation
28-- 50 bits coefficient continuation
29--
30-- Total exponent length 10 bits
31-- Total coefficient length 54 bits (16 digits)
32--
33-- Elimit = 767 (maximum encoded exponent)
34-- Emax = 384 (largest exponent value)
35-- Emin = -383 (smallest exponent value)
36-- bias = 398 (subtracted from encoded exponent) = -Etiny
37
38extended: 1
39precision: 16
40rounding: half_up
41maxExponent: 384
42minExponent: -383
43
44-- General testcases
45-- (mostly derived from the Strawman 4 document and examples)
46dece001 apply #A2300000000003D0 -> -7.50
47dece002 apply -7.50 -> #A2300000000003D0
48
49-- Normality
50dece010 apply 1234567890123456 -> #263934b9c1e28e56
51dece011 apply 1234567890123456.0 -> #263934b9c1e28e56 Rounded
52dece012 apply 1234567890123456.1 -> #263934b9c1e28e56 Rounded Inexact
53dece013 apply -1234567890123456 -> #a63934b9c1e28e56
54dece014 apply -1234567890123456.0 -> #a63934b9c1e28e56 Rounded
55dece015 apply -1234567890123456.1 -> #a63934b9c1e28e56 Rounded Inexact
56
57
58-- Nmax and similar
59dece022 apply 9.999999999999999E+384 -> #77fcff3fcff3fcff
60dece023 apply #77fcff3fcff3fcff -> 9.999999999999999E+384
61dece024 apply 1.234567890123456E+384 -> #47fd34b9c1e28e56
62dece025 apply #47fd34b9c1e28e56 -> 1.234567890123456E+384
63-- fold-downs (more below)
64dece030 apply 1.23E+384 -> #47fd300000000000 Clamped
65dece031 apply #47fd300000000000 -> 1.230000000000000E+384
66dece032 apply 1E+384 -> #47fc000000000000 Clamped
67dece033 apply #47fc000000000000 -> 1.000000000000000E+384
68
69-- overflows
70maxExponent: 999 -- set high so conversion causes the overflow
71minExponent: -999
72dece040 apply 10E+384 -> #7800000000000000 Overflow Rounded Inexact
73dece041 apply 1.000000000000000E+385 -> #7800000000000000 Overflow Rounded Inexact
74maxExponent: 384
75minExponent: -383
76
77dece051 apply 12345 -> #22380000000049c5
78dece052 apply #22380000000049c5 -> 12345
79dece053 apply 1234 -> #2238000000000534
80dece054 apply #2238000000000534 -> 1234
81dece055 apply 123 -> #22380000000000a3
82dece056 apply #22380000000000a3 -> 123
83dece057 apply 12 -> #2238000000000012
84dece058 apply #2238000000000012 -> 12
85dece059 apply 1 -> #2238000000000001
86dece060 apply #2238000000000001 -> 1
87dece061 apply 1.23 -> #22300000000000a3
88dece062 apply #22300000000000a3 -> 1.23
89dece063 apply 123.45 -> #22300000000049c5
90dece064 apply #22300000000049c5 -> 123.45
91
92-- Nmin and below
93dece071 apply 1E-383 -> #003c000000000001
94dece072 apply #003c000000000001 -> 1E-383
95dece073 apply 1.000000000000000E-383 -> #0400000000000000
96dece074 apply #0400000000000000 -> 1.000000000000000E-383
97dece075 apply 1.000000000000001E-383 -> #0400000000000001
98dece076 apply #0400000000000001 -> 1.000000000000001E-383
99
100dece077 apply 0.100000000000000E-383 -> #0000800000000000 Subnormal
101dece078 apply #0000800000000000 -> 1.00000000000000E-384 Subnormal
102dece079 apply 0.000000000000010E-383 -> #0000000000000010 Subnormal
103dece080 apply #0000000000000010 -> 1.0E-397 Subnormal
104dece081 apply 0.00000000000001E-383 -> #0004000000000001 Subnormal
105dece082 apply #0004000000000001 -> 1E-397 Subnormal
106dece083 apply 0.000000000000001E-383 -> #0000000000000001 Subnormal
107dece084 apply #0000000000000001 -> 1E-398 Subnormal
108
109-- underflows
110dece090 apply 1e-398 -> #0000000000000001 Subnormal
111dece091 apply 1.9e-398 -> #0000000000000002 Subnormal Underflow Inexact Rounded
112dece092 apply 1.1e-398 -> #0000000000000001 Subnormal Underflow Inexact Rounded
113dece093 apply 1.00000000001e-398 -> #0000000000000001 Subnormal Underflow Inexact Rounded
114dece094 apply 1.00000000000001e-398 -> #0000000000000001 Subnormal Underflow Inexact Rounded
115dece095 apply 1.000000000000001e-398 -> #0000000000000001 Subnormal Underflow Inexact Rounded
116dece096 apply 0.1e-398 -> #0000000000000000 Subnormal Underflow Inexact Rounded
117dece097 apply 0.00000000001e-398 -> #0000000000000000 Subnormal Underflow Inexact Rounded
118dece098 apply 0.00000000000001e-398 -> #0000000000000000 Subnormal Underflow Inexact Rounded
119dece099 apply 0.000000000000001e-398 -> #0000000000000000 Subnormal Underflow Inexact Rounded
120
121-- Same again, negatives
122-- Nmax and similar
123dece122 apply -9.999999999999999E+384 -> #f7fcff3fcff3fcff
124dece123 apply #f7fcff3fcff3fcff -> -9.999999999999999E+384
125dece124 apply -1.234567890123456E+384 -> #c7fd34b9c1e28e56
126dece125 apply #c7fd34b9c1e28e56 -> -1.234567890123456E+384
127-- fold-downs (more below)
128dece130 apply -1.23E+384 -> #c7fd300000000000 Clamped
129dece131 apply #c7fd300000000000 -> -1.230000000000000E+384
130dece132 apply -1E+384 -> #c7fc000000000000 Clamped
131dece133 apply #c7fc000000000000 -> -1.000000000000000E+384
132
133-- overflows
134maxExponent: 999 -- set high so conversion causes the overflow
135minExponent: -999
136dece140 apply -10E+384 -> #f800000000000000 Overflow Rounded Inexact
137dece141 apply -1.000000000000000E+385 -> #f800000000000000 Overflow Rounded Inexact
138maxExponent: 384
139minExponent: -383
140
141dece151 apply -12345 -> #a2380000000049c5
142dece152 apply #a2380000000049c5 -> -12345
143dece153 apply -1234 -> #a238000000000534
144dece154 apply #a238000000000534 -> -1234
145dece155 apply -123 -> #a2380000000000a3
146dece156 apply #a2380000000000a3 -> -123
147dece157 apply -12 -> #a238000000000012
148dece158 apply #a238000000000012 -> -12
149dece159 apply -1 -> #a238000000000001
150dece160 apply #a238000000000001 -> -1
151dece161 apply -1.23 -> #a2300000000000a3
152dece162 apply #a2300000000000a3 -> -1.23
153dece163 apply -123.45 -> #a2300000000049c5
154dece164 apply #a2300000000049c5 -> -123.45
155
156-- Nmin and below
157dece171 apply -1E-383 -> #803c000000000001
158dece172 apply #803c000000000001 -> -1E-383
159dece173 apply -1.000000000000000E-383 -> #8400000000000000
160dece174 apply #8400000000000000 -> -1.000000000000000E-383
161dece175 apply -1.000000000000001E-383 -> #8400000000000001
162dece176 apply #8400000000000001 -> -1.000000000000001E-383
163
164dece177 apply -0.100000000000000E-383 -> #8000800000000000 Subnormal
165dece178 apply #8000800000000000 -> -1.00000000000000E-384 Subnormal
166dece179 apply -0.000000000000010E-383 -> #8000000000000010 Subnormal
167dece180 apply #8000000000000010 -> -1.0E-397 Subnormal
168dece181 apply -0.00000000000001E-383 -> #8004000000000001 Subnormal
169dece182 apply #8004000000000001 -> -1E-397 Subnormal
170dece183 apply -0.000000000000001E-383 -> #8000000000000001 Subnormal
171dece184 apply #8000000000000001 -> -1E-398 Subnormal
172
173-- underflows
174dece189 apply -1e-398 -> #8000000000000001 Subnormal
175dece190 apply -1.0e-398 -> #8000000000000001 Subnormal Rounded
176dece191 apply -1.9e-398 -> #8000000000000002 Subnormal Underflow Inexact Rounded
177dece192 apply -1.1e-398 -> #8000000000000001 Subnormal Underflow Inexact Rounded
178dece193 apply -1.00000000001e-398 -> #8000000000000001 Subnormal Underflow Inexact Rounded
179dece194 apply -1.00000000000001e-398 -> #8000000000000001 Subnormal Underflow Inexact Rounded
180dece195 apply -1.000000000000001e-398 -> #8000000000000001 Subnormal Underflow Inexact Rounded
181dece196 apply -0.1e-398 -> #8000000000000000 Subnormal Underflow Inexact Rounded
182dece197 apply -0.00000000001e-398 -> #8000000000000000 Subnormal Underflow Inexact Rounded
183dece198 apply -0.00000000000001e-398 -> #8000000000000000 Subnormal Underflow Inexact Rounded
184dece199 apply -0.000000000000001e-398 -> #8000000000000000 Subnormal Underflow Inexact Rounded
185
186-- zeros
187dece401 apply 0E-500 -> #0000000000000000 Clamped
188dece402 apply 0E-400 -> #0000000000000000 Clamped
189dece403 apply 0E-398 -> #0000000000000000
190dece404 apply #0000000000000000 -> 0E-398
191dece405 apply 0.000000000000000E-383 -> #0000000000000000
192dece406 apply #0000000000000000 -> 0E-398
193dece407 apply 0E-2 -> #2230000000000000
194dece408 apply #2230000000000000 -> 0.00
195dece409 apply 0 -> #2238000000000000
196dece410 apply #2238000000000000 -> 0
197dece411 apply 0E+3 -> #2244000000000000
198dece412 apply #2244000000000000 -> 0E+3
199dece413 apply 0E+369 -> #43fc000000000000
200dece414 apply #43fc000000000000 -> 0E+369
201-- clamped zeros...
202dece415 apply 0E+370 -> #43fc000000000000 Clamped
203dece416 apply #43fc000000000000 -> 0E+369
204dece417 apply 0E+384 -> #43fc000000000000 Clamped
205dece418 apply #43fc000000000000 -> 0E+369
206dece419 apply 0E+400 -> #43fc000000000000 Clamped
207dece420 apply #43fc000000000000 -> 0E+369
208dece421 apply 0E+500 -> #43fc000000000000 Clamped
209dece422 apply #43fc000000000000 -> 0E+369
210
211-- negative zeros
212dece431 apply -0E-400 -> #8000000000000000 Clamped
213dece432 apply -0E-400 -> #8000000000000000 Clamped
214dece433 apply -0E-398 -> #8000000000000000
215dece434 apply #8000000000000000 -> -0E-398
216dece435 apply -0.000000000000000E-383 -> #8000000000000000
217dece436 apply #8000000000000000 -> -0E-398
218dece437 apply -0E-2 -> #a230000000000000
219dece438 apply #a230000000000000 -> -0.00
220dece439 apply -0 -> #a238000000000000
221dece440 apply #a238000000000000 -> -0
222dece441 apply -0E+3 -> #a244000000000000
223dece442 apply #a244000000000000 -> -0E+3
224dece443 apply -0E+369 -> #c3fc000000000000
225dece444 apply #c3fc000000000000 -> -0E+369
226-- clamped zeros...
227dece445 apply -0E+370 -> #c3fc000000000000 Clamped
228dece446 apply #c3fc000000000000 -> -0E+369
229dece447 apply -0E+384 -> #c3fc000000000000 Clamped
230dece448 apply #c3fc000000000000 -> -0E+369
231dece449 apply -0E+400 -> #c3fc000000000000 Clamped
232dece450 apply #c3fc000000000000 -> -0E+369
233dece451 apply -0E+500 -> #c3fc000000000000 Clamped
234dece452 apply #c3fc000000000000 -> -0E+369
235
236-- Specials
237dece501 apply #7878787878787878 -> #7800000000000000
238dece502 apply #7800000000000000 -> Infinity
239dece503 apply #7979797979797979 -> #7800000000000000
240dece504 apply #7900000000000000 -> Infinity
241dece505 apply #7a7a7a7a7a7a7a7a -> #7800000000000000
242dece506 apply #7a00000000000000 -> Infinity
243dece507 apply #7b7b7b7b7b7b7b7b -> #7800000000000000
244dece508 apply #7b00000000000000 -> Infinity
245dece509 apply #7c7c7c7c7c7c7c7c -> #7dffffffffffffff
246dece510 apply #7c00000000000000 -> NaN
247dece511 apply #7d7d7d7d7d7d7d7d -> #7dffffffffffffff
248dece512 apply #7d00000000000000 -> NaN
249dece513 apply #7e7e7e7e7e7e7e7e -> #7fffffffffffffff
250dece514 apply #7e00000000000000 -> sNaN
251dece515 apply #7f7f7f7f7f7f7f7f -> #7fffffffffffffff
252dece516 apply #7f00000000000000 -> sNaN
253
254dece521 apply #f878787878787878 -> #f800000000000000
255dece522 apply #f800000000000000 -> -Infinity
256dece523 apply #f979797979797979 -> #f800000000000000
257dece524 apply #f900000000000000 -> -Infinity
258dece525 apply #fa7a7a7a7a7a7a7a -> #f800000000000000
259dece526 apply #fa00000000000000 -> -Infinity
260dece527 apply #fb7b7b7b7b7b7b7b -> #f800000000000000
261dece528 apply #fb00000000000000 -> -Infinity
262dece529 apply #fc7c7c7c7c7c7c7c -> #7dffffffffffffff
263dece530 apply #fc00000000000000 -> NaN
264dece531 apply #fd7d7d7d7d7d7d7d -> #7dffffffffffffff
265dece532 apply #fd00000000000000 -> NaN
266dece533 apply #fe7e7e7e7e7e7e7e -> #7fffffffffffffff
267dece534 apply #fe00000000000000 -> sNaN
268dece535 apply #ff7f7f7f7f7f7f7f -> #7fffffffffffffff
269dece536 apply #ff00000000000000 -> sNaN
270
271-- fold-down full sequence
272dece601 apply 1E+384 -> #47fc000000000000 Clamped
273dece602 apply #47fc000000000000 -> 1.000000000000000E+384
274dece603 apply 1E+383 -> #43fc800000000000 Clamped
275dece604 apply #43fc800000000000 -> 1.00000000000000E+383
276dece605 apply 1E+382 -> #43fc100000000000 Clamped
277dece606 apply #43fc100000000000 -> 1.0000000000000E+382
278dece607 apply 1E+381 -> #43fc010000000000 Clamped
279dece608 apply #43fc010000000000 -> 1.000000000000E+381
280dece609 apply 1E+380 -> #43fc002000000000 Clamped
281dece610 apply #43fc002000000000 -> 1.00000000000E+380
282dece611 apply 1E+379 -> #43fc000400000000 Clamped
283dece612 apply #43fc000400000000 -> 1.0000000000E+379
284dece613 apply 1E+378 -> #43fc000040000000 Clamped
285dece614 apply #43fc000040000000 -> 1.000000000E+378
286dece615 apply 1E+377 -> #43fc000008000000 Clamped
287dece616 apply #43fc000008000000 -> 1.00000000E+377
288dece617 apply 1E+376 -> #43fc000001000000 Clamped
289dece618 apply #43fc000001000000 -> 1.0000000E+376
290dece619 apply 1E+375 -> #43fc000000100000 Clamped
291dece620 apply #43fc000000100000 -> 1.000000E+375
292dece621 apply 1E+374 -> #43fc000000020000 Clamped
293dece622 apply #43fc000000020000 -> 1.00000E+374
294dece623 apply 1E+373 -> #43fc000000004000 Clamped
295dece624 apply #43fc000000004000 -> 1.0000E+373
296dece625 apply 1E+372 -> #43fc000000000400 Clamped
297dece626 apply #43fc000000000400 -> 1.000E+372
298dece627 apply 1E+371 -> #43fc000000000080 Clamped
299dece628 apply #43fc000000000080 -> 1.00E+371
300dece629 apply 1E+370 -> #43fc000000000010 Clamped
301dece630 apply #43fc000000000010 -> 1.0E+370
302dece631 apply 1E+369 -> #43fc000000000001
303dece632 apply #43fc000000000001 -> 1E+369
304dece633 apply 1E+368 -> #43f8000000000001
305dece634 apply #43f8000000000001 -> 1E+368
306-- same with 9s
307dece641 apply 9E+384 -> #77fc000000000000 Clamped
308dece642 apply #77fc000000000000 -> 9.000000000000000E+384
309dece643 apply 9E+383 -> #43fc8c0000000000 Clamped
310dece644 apply #43fc8c0000000000 -> 9.00000000000000E+383
311dece645 apply 9E+382 -> #43fc1a0000000000 Clamped
312dece646 apply #43fc1a0000000000 -> 9.0000000000000E+382
313dece647 apply 9E+381 -> #43fc090000000000 Clamped
314dece648 apply #43fc090000000000 -> 9.000000000000E+381
315dece649 apply 9E+380 -> #43fc002300000000 Clamped
316dece650 apply #43fc002300000000 -> 9.00000000000E+380
317dece651 apply 9E+379 -> #43fc000680000000 Clamped
318dece652 apply #43fc000680000000 -> 9.0000000000E+379
319dece653 apply 9E+378 -> #43fc000240000000 Clamped
320dece654 apply #43fc000240000000 -> 9.000000000E+378
321dece655 apply 9E+377 -> #43fc000008c00000 Clamped
322dece656 apply #43fc000008c00000 -> 9.00000000E+377
323dece657 apply 9E+376 -> #43fc000001a00000 Clamped
324dece658 apply #43fc000001a00000 -> 9.0000000E+376
325dece659 apply 9E+375 -> #43fc000000900000 Clamped
326dece660 apply #43fc000000900000 -> 9.000000E+375
327dece661 apply 9E+374 -> #43fc000000023000 Clamped
328dece662 apply #43fc000000023000 -> 9.00000E+374
329dece663 apply 9E+373 -> #43fc000000006800 Clamped
330dece664 apply #43fc000000006800 -> 9.0000E+373
331dece665 apply 9E+372 -> #43fc000000002400 Clamped
332dece666 apply #43fc000000002400 -> 9.000E+372
333dece667 apply 9E+371 -> #43fc00000000008c Clamped
334dece668 apply #43fc00000000008c -> 9.00E+371
335dece669 apply 9E+370 -> #43fc00000000001a Clamped
336dece670 apply #43fc00000000001a -> 9.0E+370
337dece671 apply 9E+369 -> #43fc000000000009
338dece672 apply #43fc000000000009 -> 9E+369
339dece673 apply 9E+368 -> #43f8000000000009
340dece674 apply #43f8000000000009 -> 9E+368
341
342
343-- Selected DPD codes
344dece700 apply #2238000000000000 -> 0
345dece701 apply #2238000000000009 -> 9
346dece702 apply #2238000000000010 -> 10
347dece703 apply #2238000000000019 -> 19
348dece704 apply #2238000000000020 -> 20
349dece705 apply #2238000000000029 -> 29
350dece706 apply #2238000000000030 -> 30
351dece707 apply #2238000000000039 -> 39
352dece708 apply #2238000000000040 -> 40
353dece709 apply #2238000000000049 -> 49
354dece710 apply #2238000000000050 -> 50
355dece711 apply #2238000000000059 -> 59
356dece712 apply #2238000000000060 -> 60
357dece713 apply #2238000000000069 -> 69
358dece714 apply #2238000000000070 -> 70
359dece715 apply #2238000000000071 -> 71
360dece716 apply #2238000000000072 -> 72
361dece717 apply #2238000000000073 -> 73
362dece718 apply #2238000000000074 -> 74
363dece719 apply #2238000000000075 -> 75
364dece720 apply #2238000000000076 -> 76
365dece721 apply #2238000000000077 -> 77
366dece722 apply #2238000000000078 -> 78
367dece723 apply #2238000000000079 -> 79
368
369dece730 apply #223800000000029e -> 994
370dece731 apply #223800000000029f -> 995
371dece732 apply #22380000000002a0 -> 520
372dece733 apply #22380000000002a1 -> 521
373
374-- DPD: one of each of the huffman groups
375dece740 apply #22380000000003f7 -> 777
376dece741 apply #22380000000003f8 -> 778
377dece742 apply #22380000000003eb -> 787
378dece743 apply #223800000000037d -> 877
379dece744 apply #223800000000039f -> 997
380dece745 apply #22380000000003bf -> 979
381dece746 apply #22380000000003df -> 799
382dece747 apply #223800000000006e -> 888
383
384
385-- DPD all-highs cases (includes the 24 redundant codes)
386dece750 apply #223800000000006e -> 888
387dece751 apply #223800000000016e -> 888
388dece752 apply #223800000000026e -> 888
389dece753 apply #223800000000036e -> 888
390dece754 apply #223800000000006f -> 889
391dece755 apply #223800000000016f -> 889
392dece756 apply #223800000000026f -> 889
393dece757 apply #223800000000036f -> 889
394
395dece760 apply #223800000000007e -> 898
396dece761 apply #223800000000017e -> 898
397dece762 apply #223800000000027e -> 898
398dece763 apply #223800000000037e -> 898
399dece764 apply #223800000000007f -> 899
400dece765 apply #223800000000017f -> 899
401dece766 apply #223800000000027f -> 899
402dece767 apply #223800000000037f -> 899
403
404dece770 apply #22380000000000ee -> 988
405dece771 apply #22380000000001ee -> 988
406dece772 apply #22380000000002ee -> 988
407dece773 apply #22380000000003ee -> 988
408dece774 apply #22380000000000ef -> 989
409dece775 apply #22380000000001ef -> 989
410dece776 apply #22380000000002ef -> 989
411dece777 apply #22380000000003ef -> 989
412
413dece780 apply #22380000000000fe -> 998
414dece781 apply #22380000000001fe -> 998
415dece782 apply #22380000000002fe -> 998
416dece783 apply #22380000000003fe -> 998
417dece784 apply #22380000000000ff -> 999
418dece785 apply #22380000000001ff -> 999
419dece786 apply #22380000000002ff -> 999
420dece787 apply #22380000000003ff -> 999
421