Facundo Batista | 353750c | 2007-09-13 18:13:15 +0000 | [diff] [blame] | 1 | ------------------------------------------------------------------------
|
| 2 | -- rotate.decTest -- rotate coefficient left or right --
|
| 3 | -- Copyright (c) IBM Corporation, 1981, 2007. 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 | ------------------------------------------------------------------------
|
Facundo Batista | 9401cbe | 2007-11-23 18:14:50 +0000 | [diff] [blame] | 20 | version: 2.57
|
Facundo Batista | 353750c | 2007-09-13 18:13:15 +0000 | [diff] [blame] | 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
|