|
1 ------------------------------------------------------------------------ |
|
2 -- rotate.decTest -- rotate coefficient left or right -- |
|
3 -- Copyright (c) IBM Corporation, 1981, 2008. 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 ------------------------------------------------------------------------ |
|
20 version: 2.58 |
|
21 |
|
22 extended: 1 |
|
23 precision: 9 |
|
24 rounding: half_up |
|
25 maxExponent: 999 |
|
26 minExponent: -999 |
|
27 |
|
28 -- Sanity check |
|
29 rotx001 rotate 0 0 -> 0 |
|
30 rotx002 rotate 0 2 -> 0 |
|
31 rotx003 rotate 1 2 -> 100 |
|
32 rotx004 rotate 34 8 -> 400000003 |
|
33 rotx005 rotate 1 9 -> 1 |
|
34 rotx006 rotate 1 -1 -> 100000000 |
|
35 rotx007 rotate 123456789 -1 -> 912345678 |
|
36 rotx008 rotate 123456789 -8 -> 234567891 |
|
37 rotx009 rotate 123456789 -9 -> 123456789 |
|
38 rotx010 rotate 0 -2 -> 0 |
|
39 |
|
40 -- rhs must be an integer |
|
41 rotx011 rotate 1 1.5 -> NaN Invalid_operation |
|
42 rotx012 rotate 1 1.0 -> NaN Invalid_operation |
|
43 rotx013 rotate 1 0.1 -> NaN Invalid_operation |
|
44 rotx014 rotate 1 0.0 -> NaN Invalid_operation |
|
45 rotx015 rotate 1 1E+1 -> NaN Invalid_operation |
|
46 rotx016 rotate 1 1E+99 -> NaN Invalid_operation |
|
47 rotx017 rotate 1 Inf -> NaN Invalid_operation |
|
48 rotx018 rotate 1 -Inf -> NaN Invalid_operation |
|
49 -- and |rhs| <= precision |
|
50 rotx020 rotate 1 -1000 -> NaN Invalid_operation |
|
51 rotx021 rotate 1 -10 -> NaN Invalid_operation |
|
52 rotx022 rotate 1 10 -> NaN Invalid_operation |
|
53 rotx023 rotate 1 1000 -> NaN Invalid_operation |
|
54 |
|
55 -- full pattern |
|
56 rotx030 rotate 123456789 -9 -> 123456789 |
|
57 rotx031 rotate 123456789 -8 -> 234567891 |
|
58 rotx032 rotate 123456789 -7 -> 345678912 |
|
59 rotx033 rotate 123456789 -6 -> 456789123 |
|
60 rotx034 rotate 123456789 -5 -> 567891234 |
|
61 rotx035 rotate 123456789 -4 -> 678912345 |
|
62 rotx036 rotate 123456789 -3 -> 789123456 |
|
63 rotx037 rotate 123456789 -2 -> 891234567 |
|
64 rotx038 rotate 123456789 -1 -> 912345678 |
|
65 rotx039 rotate 123456789 -0 -> 123456789 |
|
66 rotx040 rotate 123456789 +0 -> 123456789 |
|
67 rotx041 rotate 123456789 +1 -> 234567891 |
|
68 rotx042 rotate 123456789 +2 -> 345678912 |
|
69 rotx043 rotate 123456789 +3 -> 456789123 |
|
70 rotx044 rotate 123456789 +4 -> 567891234 |
|
71 rotx045 rotate 123456789 +5 -> 678912345 |
|
72 rotx046 rotate 123456789 +6 -> 789123456 |
|
73 rotx047 rotate 123456789 +7 -> 891234567 |
|
74 rotx048 rotate 123456789 +8 -> 912345678 |
|
75 rotx049 rotate 123456789 +9 -> 123456789 |
|
76 |
|
77 -- zeros |
|
78 rotx060 rotate 0E-10 +9 -> 0E-10 |
|
79 rotx061 rotate 0E-10 -9 -> 0E-10 |
|
80 rotx062 rotate 0.000 +9 -> 0.000 |
|
81 rotx063 rotate 0.000 -9 -> 0.000 |
|
82 rotx064 rotate 0E+10 +9 -> 0E+10 |
|
83 rotx065 rotate 0E+10 -9 -> 0E+10 |
|
84 rotx066 rotate -0E-10 +9 -> -0E-10 |
|
85 rotx067 rotate -0E-10 -9 -> -0E-10 |
|
86 rotx068 rotate -0.000 +9 -> -0.000 |
|
87 rotx069 rotate -0.000 -9 -> -0.000 |
|
88 rotx070 rotate -0E+10 +9 -> -0E+10 |
|
89 rotx071 rotate -0E+10 -9 -> -0E+10 |
|
90 |
|
91 -- Nmax, Nmin, Ntiny |
|
92 rotx141 rotate 9.99999999E+999 -1 -> 9.99999999E+999 |
|
93 rotx142 rotate 9.99999999E+999 -8 -> 9.99999999E+999 |
|
94 rotx143 rotate 9.99999999E+999 1 -> 9.99999999E+999 |
|
95 rotx144 rotate 9.99999999E+999 8 -> 9.99999999E+999 |
|
96 rotx145 rotate 1E-999 -1 -> 1.00000000E-991 |
|
97 rotx146 rotate 1E-999 -8 -> 1.0E-998 |
|
98 rotx147 rotate 1E-999 1 -> 1.0E-998 |
|
99 rotx148 rotate 1E-999 8 -> 1.00000000E-991 |
|
100 rotx151 rotate 1.00000000E-999 -1 -> 1.0000000E-1000 |
|
101 rotx152 rotate 1.00000000E-999 -8 -> 1E-1007 |
|
102 rotx153 rotate 1.00000000E-999 1 -> 1E-1007 |
|
103 rotx154 rotate 1.00000000E-999 8 -> 1.0000000E-1000 |
|
104 rotx155 rotate 9.00000000E-999 -1 -> 9.0000000E-1000 |
|
105 rotx156 rotate 9.00000000E-999 -8 -> 9E-1007 |
|
106 rotx157 rotate 9.00000000E-999 1 -> 9E-1007 |
|
107 rotx158 rotate 9.00000000E-999 8 -> 9.0000000E-1000 |
|
108 rotx160 rotate 1E-1007 -1 -> 1.00000000E-999 |
|
109 rotx161 rotate 1E-1007 -8 -> 1.0E-1006 |
|
110 rotx162 rotate 1E-1007 1 -> 1.0E-1006 |
|
111 rotx163 rotate 1E-1007 8 -> 1.00000000E-999 |
|
112 -- negatives |
|
113 rotx171 rotate -9.99999999E+999 -1 -> -9.99999999E+999 |
|
114 rotx172 rotate -9.99999999E+999 -8 -> -9.99999999E+999 |
|
115 rotx173 rotate -9.99999999E+999 1 -> -9.99999999E+999 |
|
116 rotx174 rotate -9.99999999E+999 8 -> -9.99999999E+999 |
|
117 rotx175 rotate -1E-999 -1 -> -1.00000000E-991 |
|
118 rotx176 rotate -1E-999 -8 -> -1.0E-998 |
|
119 rotx177 rotate -1E-999 1 -> -1.0E-998 |
|
120 rotx178 rotate -1E-999 8 -> -1.00000000E-991 |
|
121 rotx181 rotate -1.00000000E-999 -1 -> -1.0000000E-1000 |
|
122 rotx182 rotate -1.00000000E-999 -8 -> -1E-1007 |
|
123 rotx183 rotate -1.00000000E-999 1 -> -1E-1007 |
|
124 rotx184 rotate -1.00000000E-999 8 -> -1.0000000E-1000 |
|
125 rotx185 rotate -9.00000000E-999 -1 -> -9.0000000E-1000 |
|
126 rotx186 rotate -9.00000000E-999 -8 -> -9E-1007 |
|
127 rotx187 rotate -9.00000000E-999 1 -> -9E-1007 |
|
128 rotx188 rotate -9.00000000E-999 8 -> -9.0000000E-1000 |
|
129 rotx190 rotate -1E-1007 -1 -> -1.00000000E-999 |
|
130 rotx191 rotate -1E-1007 -8 -> -1.0E-1006 |
|
131 rotx192 rotate -1E-1007 1 -> -1.0E-1006 |
|
132 rotx193 rotate -1E-1007 8 -> -1.00000000E-999 |
|
133 |
|
134 -- more negatives (of sanities) |
|
135 rotx201 rotate -0 0 -> -0 |
|
136 rotx202 rotate -0 2 -> -0 |
|
137 rotx203 rotate -1 2 -> -100 |
|
138 rotx204 rotate -1 8 -> -100000000 |
|
139 rotx205 rotate -1 9 -> -1 |
|
140 rotx206 rotate -1 -1 -> -100000000 |
|
141 rotx207 rotate -123456789 -1 -> -912345678 |
|
142 rotx208 rotate -123456789 -8 -> -234567891 |
|
143 rotx209 rotate -123456789 -9 -> -123456789 |
|
144 rotx210 rotate -0 -2 -> -0 |
|
145 |
|
146 -- Specials; NaNs are handled as usual |
|
147 rotx781 rotate -Inf -8 -> -Infinity |
|
148 rotx782 rotate -Inf -1 -> -Infinity |
|
149 rotx783 rotate -Inf -0 -> -Infinity |
|
150 rotx784 rotate -Inf 0 -> -Infinity |
|
151 rotx785 rotate -Inf 1 -> -Infinity |
|
152 rotx786 rotate -Inf 8 -> -Infinity |
|
153 rotx787 rotate -1000 -Inf -> NaN Invalid_operation |
|
154 rotx788 rotate -Inf -Inf -> NaN Invalid_operation |
|
155 rotx789 rotate -1 -Inf -> NaN Invalid_operation |
|
156 rotx790 rotate -0 -Inf -> NaN Invalid_operation |
|
157 rotx791 rotate 0 -Inf -> NaN Invalid_operation |
|
158 rotx792 rotate 1 -Inf -> NaN Invalid_operation |
|
159 rotx793 rotate 1000 -Inf -> NaN Invalid_operation |
|
160 rotx794 rotate Inf -Inf -> NaN Invalid_operation |
|
161 |
|
162 rotx800 rotate Inf -Inf -> NaN Invalid_operation |
|
163 rotx801 rotate Inf -8 -> Infinity |
|
164 rotx802 rotate Inf -1 -> Infinity |
|
165 rotx803 rotate Inf -0 -> Infinity |
|
166 rotx804 rotate Inf 0 -> Infinity |
|
167 rotx805 rotate Inf 1 -> Infinity |
|
168 rotx806 rotate Inf 8 -> Infinity |
|
169 rotx807 rotate Inf Inf -> NaN Invalid_operation |
|
170 rotx808 rotate -1000 Inf -> NaN Invalid_operation |
|
171 rotx809 rotate -Inf Inf -> NaN Invalid_operation |
|
172 rotx810 rotate -1 Inf -> NaN Invalid_operation |
|
173 rotx811 rotate -0 Inf -> NaN Invalid_operation |
|
174 rotx812 rotate 0 Inf -> NaN Invalid_operation |
|
175 rotx813 rotate 1 Inf -> NaN Invalid_operation |
|
176 rotx814 rotate 1000 Inf -> NaN Invalid_operation |
|
177 rotx815 rotate Inf Inf -> NaN Invalid_operation |
|
178 |
|
179 rotx821 rotate NaN -Inf -> NaN |
|
180 rotx822 rotate NaN -1000 -> NaN |
|
181 rotx823 rotate NaN -1 -> NaN |
|
182 rotx824 rotate NaN -0 -> NaN |
|
183 rotx825 rotate NaN 0 -> NaN |
|
184 rotx826 rotate NaN 1 -> NaN |
|
185 rotx827 rotate NaN 1000 -> NaN |
|
186 rotx828 rotate NaN Inf -> NaN |
|
187 rotx829 rotate NaN NaN -> NaN |
|
188 rotx830 rotate -Inf NaN -> NaN |
|
189 rotx831 rotate -1000 NaN -> NaN |
|
190 rotx832 rotate -1 NaN -> NaN |
|
191 rotx833 rotate -0 NaN -> NaN |
|
192 rotx834 rotate 0 NaN -> NaN |
|
193 rotx835 rotate 1 NaN -> NaN |
|
194 rotx836 rotate 1000 NaN -> NaN |
|
195 rotx837 rotate Inf NaN -> NaN |
|
196 |
|
197 |
|
198 |
|
199 rotx841 rotate sNaN -Inf -> NaN Invalid_operation |
|
200 rotx842 rotate sNaN -1000 -> NaN Invalid_operation |
|
201 rotx843 rotate sNaN -1 -> NaN Invalid_operation |
|
202 rotx844 rotate sNaN -0 -> NaN Invalid_operation |
|
203 rotx845 rotate sNaN 0 -> NaN Invalid_operation |
|
204 rotx846 rotate sNaN 1 -> NaN Invalid_operation |
|
205 rotx847 rotate sNaN 1000 -> NaN Invalid_operation |
|
206 rotx848 rotate sNaN NaN -> NaN Invalid_operation |
|
207 rotx849 rotate sNaN sNaN -> NaN Invalid_operation |
|
208 rotx850 rotate NaN sNaN -> NaN Invalid_operation |
|
209 rotx851 rotate -Inf sNaN -> NaN Invalid_operation |
|
210 rotx852 rotate -1000 sNaN -> NaN Invalid_operation |
|
211 rotx853 rotate -1 sNaN -> NaN Invalid_operation |
|
212 rotx854 rotate -0 sNaN -> NaN Invalid_operation |
|
213 rotx855 rotate 0 sNaN -> NaN Invalid_operation |
|
214 rotx856 rotate 1 sNaN -> NaN Invalid_operation |
|
215 rotx857 rotate 1000 sNaN -> NaN Invalid_operation |
|
216 rotx858 rotate Inf sNaN -> NaN Invalid_operation |
|
217 rotx859 rotate NaN sNaN -> NaN Invalid_operation |
|
218 |
|
219 -- propagating NaNs |
|
220 rotx861 rotate NaN1 -Inf -> NaN1 |
|
221 rotx862 rotate +NaN2 -1000 -> NaN2 |
|
222 rotx863 rotate NaN3 1000 -> NaN3 |
|
223 rotx864 rotate NaN4 Inf -> NaN4 |
|
224 rotx865 rotate NaN5 +NaN6 -> NaN5 |
|
225 rotx866 rotate -Inf NaN7 -> NaN7 |
|
226 rotx867 rotate -1000 NaN8 -> NaN8 |
|
227 rotx868 rotate 1000 NaN9 -> NaN9 |
|
228 rotx869 rotate Inf +NaN10 -> NaN10 |
|
229 rotx871 rotate sNaN11 -Inf -> NaN11 Invalid_operation |
|
230 rotx872 rotate sNaN12 -1000 -> NaN12 Invalid_operation |
|
231 rotx873 rotate sNaN13 1000 -> NaN13 Invalid_operation |
|
232 rotx874 rotate sNaN14 NaN17 -> NaN14 Invalid_operation |
|
233 rotx875 rotate sNaN15 sNaN18 -> NaN15 Invalid_operation |
|
234 rotx876 rotate NaN16 sNaN19 -> NaN19 Invalid_operation |
|
235 rotx877 rotate -Inf +sNaN20 -> NaN20 Invalid_operation |
|
236 rotx878 rotate -1000 sNaN21 -> NaN21 Invalid_operation |
|
237 rotx879 rotate 1000 sNaN22 -> NaN22 Invalid_operation |
|
238 rotx880 rotate Inf sNaN23 -> NaN23 Invalid_operation |
|
239 rotx881 rotate +NaN25 +sNaN24 -> NaN24 Invalid_operation |
|
240 rotx882 rotate -NaN26 NaN28 -> -NaN26 |
|
241 rotx883 rotate -sNaN27 sNaN29 -> -NaN27 Invalid_operation |
|
242 rotx884 rotate 1000 -NaN30 -> -NaN30 |
|
243 rotx885 rotate 1000 -sNaN31 -> -NaN31 Invalid_operation |
|
244 |
|
245 -- payload decapitate |
|
246 precision: 5 |
|
247 rotx886 rotate 11 -sNaN1234567890 -> -NaN67890 Invalid_operation |