| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 1 | ------------------------------------------------------------------------
 | 
 | 2 | -- ddShift.decTest -- shift decDouble coefficient left or right       --
 | 
| Benjamin Peterson | f17ff4e | 2008-07-31 16:32:12 +0000 | [diff] [blame] | 3 | -- Copyright (c) IBM Corporation, 1981, 2008.  All rights reserved.   --
 | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 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 | ------------------------------------------------------------------------
 | 
| Mark Dickinson | 8a54653 | 2009-10-08 16:30:38 +0000 | [diff] [blame] | 20 | version: 2.59
 | 
| Thomas Wouters | 1b7f891 | 2007-09-19 03:06:30 +0000 | [diff] [blame] | 21 | 
 | 
 | 22 | precision:   16
 | 
 | 23 | maxExponent: 384
 | 
 | 24 | minExponent: -383
 | 
 | 25 | extended:    1
 | 
 | 26 | clamp:       1
 | 
 | 27 | rounding:    half_even
 | 
 | 28 | 
 | 
 | 29 | -- Sanity check
 | 
 | 30 | ddshi001 shift                 0    0  ->  0
 | 
 | 31 | ddshi002 shift                 0    2  ->  0
 | 
 | 32 | ddshi003 shift                 1    2  ->  100
 | 
 | 33 | ddshi004 shift                 1   15  ->  1000000000000000
 | 
 | 34 | ddshi005 shift                 1   16  ->  0
 | 
 | 35 | ddshi006 shift                 1   -1  ->  0
 | 
 | 36 | ddshi007 shift                 0   -2  ->  0
 | 
 | 37 | ddshi008 shift  1234567890123456   -1  ->  123456789012345
 | 
 | 38 | ddshi009 shift  1234567890123456   -15 ->  1
 | 
 | 39 | ddshi010 shift  1234567890123456   -16 ->  0
 | 
 | 40 | ddshi011 shift  9934567890123456   -15 ->  9
 | 
 | 41 | ddshi012 shift  9934567890123456   -16 ->  0
 | 
 | 42 | 
 | 
 | 43 | -- rhs must be an integer
 | 
 | 44 | ddshi015 shift        1    1.5    -> NaN Invalid_operation
 | 
 | 45 | ddshi016 shift        1    1.0    -> NaN Invalid_operation
 | 
 | 46 | ddshi017 shift        1    0.1    -> NaN Invalid_operation
 | 
 | 47 | ddshi018 shift        1    0.0    -> NaN Invalid_operation
 | 
 | 48 | ddshi019 shift        1    1E+1   -> NaN Invalid_operation
 | 
 | 49 | ddshi020 shift        1    1E+99  -> NaN Invalid_operation
 | 
 | 50 | ddshi021 shift        1    Inf    -> NaN Invalid_operation
 | 
 | 51 | ddshi022 shift        1    -Inf   -> NaN Invalid_operation
 | 
 | 52 | -- and |rhs| <= precision
 | 
 | 53 | ddshi025 shift        1    -1000  -> NaN Invalid_operation
 | 
 | 54 | ddshi026 shift        1    -17    -> NaN Invalid_operation
 | 
 | 55 | ddshi027 shift        1     17    -> NaN Invalid_operation
 | 
 | 56 | ddshi028 shift        1     1000  -> NaN Invalid_operation
 | 
 | 57 | 
 | 
 | 58 | -- full shifting pattern
 | 
 | 59 | ddshi030 shift  1234567890123456         -16  -> 0
 | 
 | 60 | ddshi031 shift  1234567890123456         -15  -> 1
 | 
 | 61 | ddshi032 shift  1234567890123456         -14  -> 12
 | 
 | 62 | ddshi033 shift  1234567890123456         -13  -> 123
 | 
 | 63 | ddshi034 shift  1234567890123456         -12  -> 1234
 | 
 | 64 | ddshi035 shift  1234567890123456         -11  -> 12345
 | 
 | 65 | ddshi036 shift  1234567890123456         -10  -> 123456
 | 
 | 66 | ddshi037 shift  1234567890123456         -9   -> 1234567
 | 
 | 67 | ddshi038 shift  1234567890123456         -8   -> 12345678
 | 
 | 68 | ddshi039 shift  1234567890123456         -7   -> 123456789
 | 
 | 69 | ddshi040 shift  1234567890123456         -6   -> 1234567890
 | 
 | 70 | ddshi041 shift  1234567890123456         -5   -> 12345678901
 | 
 | 71 | ddshi042 shift  1234567890123456         -4   -> 123456789012
 | 
 | 72 | ddshi043 shift  1234567890123456         -3   -> 1234567890123
 | 
 | 73 | ddshi044 shift  1234567890123456         -2   -> 12345678901234
 | 
 | 74 | ddshi045 shift  1234567890123456         -1   -> 123456789012345
 | 
 | 75 | ddshi046 shift  1234567890123456         -0   -> 1234567890123456
 | 
 | 76 | 
 | 
 | 77 | ddshi047 shift  1234567890123456         +0   -> 1234567890123456
 | 
 | 78 | ddshi048 shift  1234567890123456         +1   -> 2345678901234560
 | 
 | 79 | ddshi049 shift  1234567890123456         +2   -> 3456789012345600
 | 
 | 80 | ddshi050 shift  1234567890123456         +3   -> 4567890123456000
 | 
 | 81 | ddshi051 shift  1234567890123456         +4   -> 5678901234560000
 | 
 | 82 | ddshi052 shift  1234567890123456         +5   -> 6789012345600000
 | 
 | 83 | ddshi053 shift  1234567890123456         +6   -> 7890123456000000
 | 
 | 84 | ddshi054 shift  1234567890123456         +7   -> 8901234560000000
 | 
 | 85 | ddshi055 shift  1234567890123456         +8   -> 9012345600000000
 | 
 | 86 | ddshi056 shift  1234567890123456         +9   ->  123456000000000
 | 
 | 87 | ddshi057 shift  1234567890123456         +10  -> 1234560000000000
 | 
 | 88 | ddshi058 shift  1234567890123456         +11  -> 2345600000000000
 | 
 | 89 | ddshi059 shift  1234567890123456         +12  -> 3456000000000000
 | 
 | 90 | ddshi060 shift  1234567890123456         +13  -> 4560000000000000
 | 
 | 91 | ddshi061 shift  1234567890123456         +14  -> 5600000000000000
 | 
 | 92 | ddshi062 shift  1234567890123456         +15  -> 6000000000000000
 | 
 | 93 | ddshi063 shift  1234567890123456         +16  -> 0
 | 
 | 94 | 
 | 
 | 95 | -- zeros
 | 
 | 96 | ddshi070 shift  0E-10              +9   ->   0E-10
 | 
 | 97 | ddshi071 shift  0E-10              -9   ->   0E-10
 | 
 | 98 | ddshi072 shift  0.000              +9   ->   0.000
 | 
 | 99 | ddshi073 shift  0.000              -9   ->   0.000
 | 
 | 100 | ddshi074 shift  0E+10              +9   ->   0E+10
 | 
 | 101 | ddshi075 shift  0E+10              -9   ->   0E+10
 | 
 | 102 | ddshi076 shift -0E-10              +9   ->  -0E-10
 | 
 | 103 | ddshi077 shift -0E-10              -9   ->  -0E-10
 | 
 | 104 | ddshi078 shift -0.000              +9   ->  -0.000
 | 
 | 105 | ddshi079 shift -0.000              -9   ->  -0.000
 | 
 | 106 | ddshi080 shift -0E+10              +9   ->  -0E+10
 | 
 | 107 | ddshi081 shift -0E+10              -9   ->  -0E+10
 | 
 | 108 | 
 | 
 | 109 | -- Nmax, Nmin, Ntiny
 | 
 | 110 | ddshi141 shift  9.999999999999999E+384     -1  -> 9.99999999999999E+383
 | 
 | 111 | ddshi142 shift  9.999999999999999E+384     -15 -> 9E+369
 | 
 | 112 | ddshi143 shift  9.999999999999999E+384      1  -> 9.999999999999990E+384
 | 
 | 113 | ddshi144 shift  9.999999999999999E+384      15 -> 9.000000000000000E+384
 | 
 | 114 | ddshi145 shift  1E-383                     -1  -> 0E-383
 | 
 | 115 | ddshi146 shift  1E-383                     -15 -> 0E-383
 | 
 | 116 | ddshi147 shift  1E-383                      1  -> 1.0E-382
 | 
 | 117 | ddshi148 shift  1E-383                      15 -> 1.000000000000000E-368
 | 
 | 118 | ddshi151 shift  1.000000000000000E-383     -1  -> 1.00000000000000E-384
 | 
 | 119 | ddshi152 shift  1.000000000000000E-383     -15 -> 1E-398
 | 
 | 120 | ddshi153 shift  1.000000000000000E-383      1  -> 0E-398
 | 
 | 121 | ddshi154 shift  1.000000000000000E-383      15 -> 0E-398
 | 
 | 122 | ddshi155 shift  9.000000000000000E-383     -1  -> 9.00000000000000E-384
 | 
 | 123 | ddshi156 shift  9.000000000000000E-383     -15 -> 9E-398
 | 
 | 124 | ddshi157 shift  9.000000000000000E-383      1  -> 0E-398
 | 
 | 125 | ddshi158 shift  9.000000000000000E-383      15 -> 0E-398
 | 
 | 126 | ddshi160 shift  1E-398                     -1  -> 0E-398
 | 
 | 127 | ddshi161 shift  1E-398                     -15 -> 0E-398
 | 
 | 128 | ddshi162 shift  1E-398                      1  -> 1.0E-397
 | 
 | 129 | ddshi163 shift  1E-398                      15 -> 1.000000000000000E-383
 | 
 | 130 | --  negatives
 | 
 | 131 | ddshi171 shift -9.999999999999999E+384     -1  -> -9.99999999999999E+383
 | 
 | 132 | ddshi172 shift -9.999999999999999E+384     -15 -> -9E+369
 | 
 | 133 | ddshi173 shift -9.999999999999999E+384      1  -> -9.999999999999990E+384
 | 
 | 134 | ddshi174 shift -9.999999999999999E+384      15 -> -9.000000000000000E+384
 | 
 | 135 | ddshi175 shift -1E-383                     -1  -> -0E-383
 | 
 | 136 | ddshi176 shift -1E-383                     -15 -> -0E-383
 | 
 | 137 | ddshi177 shift -1E-383                      1  -> -1.0E-382
 | 
 | 138 | ddshi178 shift -1E-383                      15 -> -1.000000000000000E-368
 | 
 | 139 | ddshi181 shift -1.000000000000000E-383     -1  -> -1.00000000000000E-384
 | 
 | 140 | ddshi182 shift -1.000000000000000E-383     -15 -> -1E-398
 | 
 | 141 | ddshi183 shift -1.000000000000000E-383      1  -> -0E-398
 | 
 | 142 | ddshi184 shift -1.000000000000000E-383      15 -> -0E-398
 | 
 | 143 | ddshi185 shift -9.000000000000000E-383     -1  -> -9.00000000000000E-384
 | 
 | 144 | ddshi186 shift -9.000000000000000E-383     -15 -> -9E-398
 | 
 | 145 | ddshi187 shift -9.000000000000000E-383      1  -> -0E-398
 | 
 | 146 | ddshi188 shift -9.000000000000000E-383      15 -> -0E-398
 | 
 | 147 | ddshi190 shift -1E-398                     -1  -> -0E-398
 | 
 | 148 | ddshi191 shift -1E-398                     -15 -> -0E-398
 | 
 | 149 | ddshi192 shift -1E-398                      1  -> -1.0E-397
 | 
 | 150 | ddshi193 shift -1E-398                      15 -> -1.000000000000000E-383
 | 
 | 151 | 
 | 
 | 152 | -- more negatives (of sanities)
 | 
 | 153 | ddshi201 shift                -0    0  -> -0
 | 
 | 154 | ddshi202 shift                -0    2  -> -0
 | 
 | 155 | ddshi203 shift                -1    2  -> -100
 | 
 | 156 | ddshi204 shift                -1   15  -> -1000000000000000
 | 
 | 157 | ddshi205 shift                -1   16  -> -0
 | 
 | 158 | ddshi206 shift                -1   -1  -> -0
 | 
 | 159 | ddshi207 shift                -0   -2  -> -0
 | 
 | 160 | ddshi208 shift -1234567890123456   -1  -> -123456789012345
 | 
 | 161 | ddshi209 shift -1234567890123456   -15 -> -1
 | 
 | 162 | ddshi210 shift -1234567890123456   -16 -> -0
 | 
 | 163 | ddshi211 shift -9934567890123456   -15 -> -9
 | 
 | 164 | ddshi212 shift -9934567890123456   -16 -> -0
 | 
 | 165 | 
 | 
 | 166 | 
 | 
 | 167 | -- Specials; NaNs are handled as usual
 | 
 | 168 | ddshi781 shift -Inf  -8     -> -Infinity
 | 
 | 169 | ddshi782 shift -Inf  -1     -> -Infinity
 | 
 | 170 | ddshi783 shift -Inf  -0     -> -Infinity
 | 
 | 171 | ddshi784 shift -Inf   0     -> -Infinity
 | 
 | 172 | ddshi785 shift -Inf   1     -> -Infinity
 | 
 | 173 | ddshi786 shift -Inf   8     -> -Infinity
 | 
 | 174 | ddshi787 shift -1000 -Inf   -> NaN Invalid_operation
 | 
 | 175 | ddshi788 shift -Inf  -Inf   -> NaN Invalid_operation
 | 
 | 176 | ddshi789 shift -1    -Inf   -> NaN Invalid_operation
 | 
 | 177 | ddshi790 shift -0    -Inf   -> NaN Invalid_operation
 | 
 | 178 | ddshi791 shift  0    -Inf   -> NaN Invalid_operation
 | 
 | 179 | ddshi792 shift  1    -Inf   -> NaN Invalid_operation
 | 
 | 180 | ddshi793 shift  1000 -Inf   -> NaN Invalid_operation
 | 
 | 181 | ddshi794 shift  Inf  -Inf   -> NaN Invalid_operation
 | 
 | 182 | 
 | 
 | 183 | ddshi800 shift  Inf  -Inf   -> NaN Invalid_operation
 | 
 | 184 | ddshi801 shift  Inf  -8     -> Infinity
 | 
 | 185 | ddshi802 shift  Inf  -1     -> Infinity
 | 
 | 186 | ddshi803 shift  Inf  -0     -> Infinity
 | 
 | 187 | ddshi804 shift  Inf   0     -> Infinity
 | 
 | 188 | ddshi805 shift  Inf   1     -> Infinity
 | 
 | 189 | ddshi806 shift  Inf   8     -> Infinity
 | 
 | 190 | ddshi807 shift  Inf   Inf   -> NaN Invalid_operation
 | 
 | 191 | ddshi808 shift -1000  Inf   -> NaN Invalid_operation
 | 
 | 192 | ddshi809 shift -Inf   Inf   -> NaN Invalid_operation
 | 
 | 193 | ddshi810 shift -1     Inf   -> NaN Invalid_operation
 | 
 | 194 | ddshi811 shift -0     Inf   -> NaN Invalid_operation
 | 
 | 195 | ddshi812 shift  0     Inf   -> NaN Invalid_operation
 | 
 | 196 | ddshi813 shift  1     Inf   -> NaN Invalid_operation
 | 
 | 197 | ddshi814 shift  1000  Inf   -> NaN Invalid_operation
 | 
 | 198 | ddshi815 shift  Inf   Inf   -> NaN Invalid_operation
 | 
 | 199 | 
 | 
 | 200 | ddshi821 shift  NaN -Inf    ->  NaN
 | 
 | 201 | ddshi822 shift  NaN -1000   ->  NaN
 | 
 | 202 | ddshi823 shift  NaN -1      ->  NaN
 | 
 | 203 | ddshi824 shift  NaN -0      ->  NaN
 | 
 | 204 | ddshi825 shift  NaN  0      ->  NaN
 | 
 | 205 | ddshi826 shift  NaN  1      ->  NaN
 | 
 | 206 | ddshi827 shift  NaN  1000   ->  NaN
 | 
 | 207 | ddshi828 shift  NaN  Inf    ->  NaN
 | 
 | 208 | ddshi829 shift  NaN  NaN    ->  NaN
 | 
 | 209 | ddshi830 shift -Inf  NaN    ->  NaN
 | 
 | 210 | ddshi831 shift -1000 NaN    ->  NaN
 | 
 | 211 | ddshi832 shift -1    NaN    ->  NaN
 | 
 | 212 | ddshi833 shift -0    NaN    ->  NaN
 | 
 | 213 | ddshi834 shift  0    NaN    ->  NaN
 | 
 | 214 | ddshi835 shift  1    NaN    ->  NaN
 | 
 | 215 | ddshi836 shift  1000 NaN    ->  NaN
 | 
 | 216 | ddshi837 shift  Inf  NaN    ->  NaN
 | 
 | 217 | 
 | 
 | 218 | ddshi841 shift  sNaN -Inf   ->  NaN  Invalid_operation
 | 
 | 219 | ddshi842 shift  sNaN -1000  ->  NaN  Invalid_operation
 | 
 | 220 | ddshi843 shift  sNaN -1     ->  NaN  Invalid_operation
 | 
 | 221 | ddshi844 shift  sNaN -0     ->  NaN  Invalid_operation
 | 
 | 222 | ddshi845 shift  sNaN  0     ->  NaN  Invalid_operation
 | 
 | 223 | ddshi846 shift  sNaN  1     ->  NaN  Invalid_operation
 | 
 | 224 | ddshi847 shift  sNaN  1000  ->  NaN  Invalid_operation
 | 
 | 225 | ddshi848 shift  sNaN  NaN   ->  NaN  Invalid_operation
 | 
 | 226 | ddshi849 shift  sNaN sNaN   ->  NaN  Invalid_operation
 | 
 | 227 | ddshi850 shift  NaN  sNaN   ->  NaN  Invalid_operation
 | 
 | 228 | ddshi851 shift -Inf  sNaN   ->  NaN  Invalid_operation
 | 
 | 229 | ddshi852 shift -1000 sNaN   ->  NaN  Invalid_operation
 | 
 | 230 | ddshi853 shift -1    sNaN   ->  NaN  Invalid_operation
 | 
 | 231 | ddshi854 shift -0    sNaN   ->  NaN  Invalid_operation
 | 
 | 232 | ddshi855 shift  0    sNaN   ->  NaN  Invalid_operation
 | 
 | 233 | ddshi856 shift  1    sNaN   ->  NaN  Invalid_operation
 | 
 | 234 | ddshi857 shift  1000 sNaN   ->  NaN  Invalid_operation
 | 
 | 235 | ddshi858 shift  Inf  sNaN   ->  NaN  Invalid_operation
 | 
 | 236 | ddshi859 shift  NaN  sNaN   ->  NaN  Invalid_operation
 | 
 | 237 | 
 | 
 | 238 | -- propagating NaNs
 | 
 | 239 | ddshi861 shift  NaN1   -Inf    ->  NaN1
 | 
 | 240 | ddshi862 shift +NaN2   -1000   ->  NaN2
 | 
 | 241 | ddshi863 shift  NaN3    1000   ->  NaN3
 | 
 | 242 | ddshi864 shift  NaN4    Inf    ->  NaN4
 | 
 | 243 | ddshi865 shift  NaN5   +NaN6   ->  NaN5
 | 
 | 244 | ddshi866 shift -Inf     NaN7   ->  NaN7
 | 
 | 245 | ddshi867 shift -1000    NaN8   ->  NaN8
 | 
 | 246 | ddshi868 shift  1000    NaN9   ->  NaN9
 | 
 | 247 | ddshi869 shift  Inf    +NaN10  ->  NaN10
 | 
 | 248 | ddshi871 shift  sNaN11  -Inf   ->  NaN11  Invalid_operation
 | 
 | 249 | ddshi872 shift  sNaN12  -1000  ->  NaN12  Invalid_operation
 | 
 | 250 | ddshi873 shift  sNaN13   1000  ->  NaN13  Invalid_operation
 | 
 | 251 | ddshi874 shift  sNaN14   NaN17 ->  NaN14  Invalid_operation
 | 
 | 252 | ddshi875 shift  sNaN15  sNaN18 ->  NaN15  Invalid_operation
 | 
 | 253 | ddshi876 shift  NaN16   sNaN19 ->  NaN19  Invalid_operation
 | 
 | 254 | ddshi877 shift -Inf    +sNaN20 ->  NaN20  Invalid_operation
 | 
 | 255 | ddshi878 shift -1000    sNaN21 ->  NaN21  Invalid_operation
 | 
 | 256 | ddshi879 shift  1000    sNaN22 ->  NaN22  Invalid_operation
 | 
 | 257 | ddshi880 shift  Inf     sNaN23 ->  NaN23  Invalid_operation
 | 
 | 258 | ddshi881 shift +NaN25  +sNaN24 ->  NaN24  Invalid_operation
 | 
 | 259 | ddshi882 shift -NaN26    NaN28 -> -NaN26
 | 
 | 260 | ddshi883 shift -sNaN27  sNaN29 -> -NaN27  Invalid_operation
 | 
 | 261 | ddshi884 shift  1000    -NaN30 -> -NaN30
 | 
 | 262 | ddshi885 shift  1000   -sNaN31 -> -NaN31  Invalid_operation
 |