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 (a] uk.ibm.com -- 19 ------------------------------------------------------------------------ 20 version: 2.59 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 248