1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
|
------------------------------------------------------------------------
-- shift.decTest -- shift coefficient left or right --
-- Copyright (c) IBM Corporation, 1981, 2007. All rights reserved. --
------------------------------------------------------------------------
-- Please see the document "General Decimal Arithmetic Testcases" --
-- at http://www2.hursley.ibm.com/decimal for the description of --
-- these testcases. --
-- --
-- These testcases are experimental ('beta' versions), and they --
-- may contain errors. They are offered on an as-is basis. In --
-- particular, achieving the same results as the tests here is not --
-- a guarantee that an implementation complies with any Standard --
-- or specification. The tests are not exhaustive. --
-- --
-- Please send comments, suggestions, and corrections to the author: --
-- Mike Cowlishaw, IBM Fellow --
-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
version: 2.56
extended: 1
precision: 9
rounding: half_up
maxExponent: 999
minExponent: -999
-- Sanity check
shix001 shift 0 0 -> 0
shix002 shift 0 2 -> 0
shix003 shift 1 2 -> 100
shix004 shift 1 8 -> 100000000
shix005 shift 1 9 -> 0
shix006 shift 1 -1 -> 0
shix007 shift 123456789 -1 -> 12345678
shix008 shift 123456789 -8 -> 1
shix009 shift 123456789 -9 -> 0
shix010 shift 0 -2 -> 0
-- rhs must be an integer
shix011 shift 1 1.5 -> NaN Invalid_operation
shix012 shift 1 1.0 -> NaN Invalid_operation
shix013 shift 1 0.1 -> NaN Invalid_operation
shix014 shift 1 0.0 -> NaN Invalid_operation
shix015 shift 1 1E+1 -> NaN Invalid_operation
shix016 shift 1 1E+99 -> NaN Invalid_operation
shix017 shift 1 Inf -> NaN Invalid_operation
shix018 shift 1 -Inf -> NaN Invalid_operation
-- and |rhs| <= precision
shix020 shift 1 -1000 -> NaN Invalid_operation
shix021 shift 1 -10 -> NaN Invalid_operation
shix022 shift 1 10 -> NaN Invalid_operation
shix023 shift 1 1000 -> NaN Invalid_operation
-- full shifting pattern
shix030 shift 123456789 -9 -> 0
shix031 shift 123456789 -8 -> 1
shix032 shift 123456789 -7 -> 12
shix033 shift 123456789 -6 -> 123
shix034 shift 123456789 -5 -> 1234
shix035 shift 123456789 -4 -> 12345
shix036 shift 123456789 -3 -> 123456
shix037 shift 123456789 -2 -> 1234567
shix038 shift 123456789 -1 -> 12345678
shix039 shift 123456789 -0 -> 123456789
shix040 shift 123456789 +0 -> 123456789
shix041 shift 123456789 +1 -> 234567890
shix042 shift 123456789 +2 -> 345678900
shix043 shift 123456789 +3 -> 456789000
shix044 shift 123456789 +4 -> 567890000
shix045 shift 123456789 +5 -> 678900000
shix046 shift 123456789 +6 -> 789000000
shix047 shift 123456789 +7 -> 890000000
shix048 shift 123456789 +8 -> 900000000
shix049 shift 123456789 +9 -> 0
-- from examples
shix051 shift 34 8 -> '400000000'
shix052 shift 12 9 -> '0'
shix053 shift 123456789 -2 -> '1234567'
shix054 shift 123456789 0 -> '123456789'
shix055 shift 123456789 +2 -> '345678900'
-- zeros
shix060 shift 0E-10 +9 -> 0E-10
shix061 shift 0E-10 -9 -> 0E-10
shix062 shift 0.000 +9 -> 0.000
shix063 shift 0.000 -9 -> 0.000
shix064 shift 0E+10 +9 -> 0E+10
shix065 shift 0E+10 -9 -> 0E+10
shix066 shift -0E-10 +9 -> -0E-10
shix067 shift -0E-10 -9 -> -0E-10
shix068 shift -0.000 +9 -> -0.000
shix069 shift -0.000 -9 -> -0.000
shix070 shift -0E+10 +9 -> -0E+10
shix071 shift -0E+10 -9 -> -0E+10
-- Nmax, Nmin, Ntiny
shix141 shift 9.99999999E+999 -1 -> 9.9999999E+998
shix142 shift 9.99999999E+999 -8 -> 9E+991
shix143 shift 9.99999999E+999 1 -> 9.99999990E+999
shix144 shift 9.99999999E+999 8 -> 9.00000000E+999
shix145 shift 1E-999 -1 -> 0E-999
shix146 shift 1E-999 -8 -> 0E-999
shix147 shift 1E-999 1 -> 1.0E-998
shix148 shift 1E-999 8 -> 1.00000000E-991
shix151 shift 1.00000000E-999 -1 -> 1.0000000E-1000
shix152 shift 1.00000000E-999 -8 -> 1E-1007
shix153 shift 1.00000000E-999 1 -> 0E-1007
shix154 shift 1.00000000E-999 8 -> 0E-1007
shix155 shift 9.00000000E-999 -1 -> 9.0000000E-1000
shix156 shift 9.00000000E-999 -8 -> 9E-1007
shix157 shift 9.00000000E-999 1 -> 0E-1007
shix158 shift 9.00000000E-999 8 -> 0E-1007
shix160 shift 1E-1007 -1 -> 0E-1007
shix161 shift 1E-1007 -8 -> 0E-1007
shix162 shift 1E-1007 1 -> 1.0E-1006
shix163 shift 1E-1007 8 -> 1.00000000E-999
-- negatives
shix171 shift -9.99999999E+999 -1 -> -9.9999999E+998
shix172 shift -9.99999999E+999 -8 -> -9E+991
shix173 shift -9.99999999E+999 1 -> -9.99999990E+999
shix174 shift -9.99999999E+999 8 -> -9.00000000E+999
shix175 shift -1E-999 -1 -> -0E-999
shix176 shift -1E-999 -8 -> -0E-999
shix177 shift -1E-999 1 -> -1.0E-998
shix178 shift -1E-999 8 -> -1.00000000E-991
shix181 shift -1.00000000E-999 -1 -> -1.0000000E-1000
shix182 shift -1.00000000E-999 -8 -> -1E-1007
shix183 shift -1.00000000E-999 1 -> -0E-1007
shix184 shift -1.00000000E-999 8 -> -0E-1007
shix185 shift -9.00000000E-999 -1 -> -9.0000000E-1000
shix186 shift -9.00000000E-999 -8 -> -9E-1007
shix187 shift -9.00000000E-999 1 -> -0E-1007
shix188 shift -9.00000000E-999 8 -> -0E-1007
shix190 shift -1E-1007 -1 -> -0E-1007
shix191 shift -1E-1007 -8 -> -0E-1007
shix192 shift -1E-1007 1 -> -1.0E-1006
shix193 shift -1E-1007 8 -> -1.00000000E-999
-- more negatives (of sanities)
shix201 shift -0 0 -> -0
shix202 shift -0 2 -> -0
shix203 shift -1 2 -> -100
shix204 shift -1 8 -> -100000000
shix205 shift -1 9 -> -0
shix206 shift -1 -1 -> -0
shix207 shift -123456789 -1 -> -12345678
shix208 shift -123456789 -8 -> -1
shix209 shift -123456789 -9 -> -0
shix210 shift -0 -2 -> -0
shix211 shift -0 -0 -> -0
-- Specials; NaNs are handled as usual
shix781 shift -Inf -8 -> -Infinity
shix782 shift -Inf -1 -> -Infinity
shix783 shift -Inf -0 -> -Infinity
shix784 shift -Inf 0 -> -Infinity
shix785 shift -Inf 1 -> -Infinity
shix786 shift -Inf 8 -> -Infinity
shix787 shift -1000 -Inf -> NaN Invalid_operation
shix788 shift -Inf -Inf -> NaN Invalid_operation
shix789 shift -1 -Inf -> NaN Invalid_operation
shix790 shift -0 -Inf -> NaN Invalid_operation
shix791 shift 0 -Inf -> NaN Invalid_operation
shix792 shift 1 -Inf -> NaN Invalid_operation
shix793 shift 1000 -Inf -> NaN Invalid_operation
shix794 shift Inf -Inf -> NaN Invalid_operation
shix800 shift Inf -Inf -> NaN Invalid_operation
shix801 shift Inf -8 -> Infinity
shix802 shift Inf -1 -> Infinity
shix803 shift Inf -0 -> Infinity
shix804 shift Inf 0 -> Infinity
shix805 shift Inf 1 -> Infinity
shix806 shift Inf 8 -> Infinity
shix807 shift Inf Inf -> NaN Invalid_operation
shix808 shift -1000 Inf -> NaN Invalid_operation
shix809 shift -Inf Inf -> NaN Invalid_operation
shix810 shift -1 Inf -> NaN Invalid_operation
shix811 shift -0 Inf -> NaN Invalid_operation
shix812 shift 0 Inf -> NaN Invalid_operation
shix813 shift 1 Inf -> NaN Invalid_operation
shix814 shift 1000 Inf -> NaN Invalid_operation
shix815 shift Inf Inf -> NaN Invalid_operation
shix821 shift NaN -Inf -> NaN
shix822 shift NaN -1000 -> NaN
shix823 shift NaN -1 -> NaN
shix824 shift NaN -0 -> NaN
shix825 shift NaN 0 -> NaN
shix826 shift NaN 1 -> NaN
shix827 shift NaN 1000 -> NaN
shix828 shift NaN Inf -> NaN
shix829 shift NaN NaN -> NaN
shix830 shift -Inf NaN -> NaN
shix831 shift -1000 NaN -> NaN
shix832 shift -1 NaN -> NaN
shix833 shift -0 NaN -> NaN
shix834 shift 0 NaN -> NaN
shix835 shift 1 NaN -> NaN
shix836 shift 1000 NaN -> NaN
shix837 shift Inf NaN -> NaN
shix841 shift sNaN -Inf -> NaN Invalid_operation
shix842 shift sNaN -1000 -> NaN Invalid_operation
shix843 shift sNaN -1 -> NaN Invalid_operation
shix844 shift sNaN -0 -> NaN Invalid_operation
shix845 shift sNaN 0 -> NaN Invalid_operation
shix846 shift sNaN 1 -> NaN Invalid_operation
shix847 shift sNaN 1000 -> NaN Invalid_operation
shix848 shift sNaN NaN -> NaN Invalid_operation
shix849 shift sNaN sNaN -> NaN Invalid_operation
shix850 shift NaN sNaN -> NaN Invalid_operation
shix851 shift -Inf sNaN -> NaN Invalid_operation
shix852 shift -1000 sNaN -> NaN Invalid_operation
shix853 shift -1 sNaN -> NaN Invalid_operation
shix854 shift -0 sNaN -> NaN Invalid_operation
shix855 shift 0 sNaN -> NaN Invalid_operation
shix856 shift 1 sNaN -> NaN Invalid_operation
shix857 shift 1000 sNaN -> NaN Invalid_operation
shix858 shift Inf sNaN -> NaN Invalid_operation
shix859 shift NaN sNaN -> NaN Invalid_operation
-- propagating NaNs
shix861 shift NaN1 -Inf -> NaN1
shix862 shift +NaN2 -1000 -> NaN2
shix863 shift NaN3 1000 -> NaN3
shix864 shift NaN4 Inf -> NaN4
shix865 shift NaN5 +NaN6 -> NaN5
shix866 shift -Inf NaN7 -> NaN7
shix867 shift -1000 NaN8 -> NaN8
shix868 shift 1000 NaN9 -> NaN9
shix869 shift Inf +NaN10 -> NaN10
shix871 shift sNaN11 -Inf -> NaN11 Invalid_operation
shix872 shift sNaN12 -1000 -> NaN12 Invalid_operation
shix873 shift sNaN13 1000 -> NaN13 Invalid_operation
shix874 shift sNaN14 NaN17 -> NaN14 Invalid_operation
shix875 shift sNaN15 sNaN18 -> NaN15 Invalid_operation
shix876 shift NaN16 sNaN19 -> NaN19 Invalid_operation
shix877 shift -Inf +sNaN20 -> NaN20 Invalid_operation
shix878 shift -1000 sNaN21 -> NaN21 Invalid_operation
shix879 shift 1000 sNaN22 -> NaN22 Invalid_operation
shix880 shift Inf sNaN23 -> NaN23 Invalid_operation
shix881 shift +NaN25 +sNaN24 -> NaN24 Invalid_operation
shix882 shift -NaN26 NaN28 -> -NaN26
shix883 shift -sNaN27 sNaN29 -> -NaN27 Invalid_operation
shix884 shift 1000 -NaN30 -> -NaN30
shix885 shift 1000 -sNaN31 -> -NaN31 Invalid_operation
|