bigint-add-64.js (13130B)
1 const tests = [ 2 [-0x7ffffffffffffffen, -2n, -0x8000000000000000n], 3 [-0x100000001n, -2n, -0x100000003n], 4 [-0x100000000n, -2n, -0x100000002n], 5 [-0xffffffffn, -2n, -0x100000001n], 6 [-0xfffffffen, -2n, -0x100000000n], 7 [-0x80000001n, -2n, -0x80000003n], 8 [-0x80000000n, -2n, -0x80000002n], 9 [-0x7fffffffn, -2n, -0x80000001n], 10 [-0x7ffffffen, -2n, -0x80000000n], 11 [-2n, -2n, -4n], 12 [-1n, -2n, -3n], 13 [0n, -2n, -2n], 14 [1n, -2n, -1n], 15 [2n, -2n, 0n], 16 [0x7ffffffen, -2n, 0x7ffffffcn], 17 [0x7fffffffn, -2n, 0x7ffffffdn], 18 [0x80000000n, -2n, 0x7ffffffen], 19 [0x80000001n, -2n, 0x7fffffffn], 20 [0xfffffffen, -2n, 0xfffffffcn], 21 [0xffffffffn, -2n, 0xfffffffdn], 22 [0x100000000n, -2n, 0xfffffffen], 23 [0x100000001n, -2n, 0xffffffffn], 24 [0x7ffffffffffffffen, -2n, 0x7ffffffffffffffcn], 25 [0x7fffffffffffffffn, -2n, 0x7ffffffffffffffdn], 26 [-0x7fffffffffffffffn, -1n, -0x8000000000000000n], 27 [-0x7ffffffffffffffen, -1n, -0x7fffffffffffffffn], 28 [-0x100000001n, -1n, -0x100000002n], 29 [-0x100000000n, -1n, -0x100000001n], 30 [-0xffffffffn, -1n, -0x100000000n], 31 [-0xfffffffen, -1n, -0xffffffffn], 32 [-0x80000001n, -1n, -0x80000002n], 33 [-0x80000000n, -1n, -0x80000001n], 34 [-0x7fffffffn, -1n, -0x80000000n], 35 [-0x7ffffffen, -1n, -0x7fffffffn], 36 [-1n, -1n, -2n], 37 [0n, -1n, -1n], 38 [1n, -1n, 0n], 39 [2n, -1n, 1n], 40 [0x7ffffffen, -1n, 0x7ffffffdn], 41 [0x7fffffffn, -1n, 0x7ffffffen], 42 [0x80000000n, -1n, 0x7fffffffn], 43 [0x80000001n, -1n, 0x80000000n], 44 [0xfffffffen, -1n, 0xfffffffdn], 45 [0xffffffffn, -1n, 0xfffffffen], 46 [0x100000000n, -1n, 0xffffffffn], 47 [0x100000001n, -1n, 0x100000000n], 48 [0x7ffffffffffffffen, -1n, 0x7ffffffffffffffdn], 49 [0x7fffffffffffffffn, -1n, 0x7ffffffffffffffen], 50 [-0x8000000000000000n, 0n, -0x8000000000000000n], 51 [-0x7fffffffffffffffn, 0n, -0x7fffffffffffffffn], 52 [-0x7ffffffffffffffen, 0n, -0x7ffffffffffffffen], 53 [-0x100000001n, 0n, -0x100000001n], 54 [-0x100000000n, 0n, -0x100000000n], 55 [-0xffffffffn, 0n, -0xffffffffn], 56 [-0xfffffffen, 0n, -0xfffffffen], 57 [-0x80000001n, 0n, -0x80000001n], 58 [-0x80000000n, 0n, -0x80000000n], 59 [-0x7fffffffn, 0n, -0x7fffffffn], 60 [-0x7ffffffen, 0n, -0x7ffffffen], 61 [0n, 0n, 0n], 62 [1n, 0n, 1n], 63 [2n, 0n, 2n], 64 [0x7ffffffen, 0n, 0x7ffffffen], 65 [0x7fffffffn, 0n, 0x7fffffffn], 66 [0x80000000n, 0n, 0x80000000n], 67 [0x80000001n, 0n, 0x80000001n], 68 [0xfffffffen, 0n, 0xfffffffen], 69 [0xffffffffn, 0n, 0xffffffffn], 70 [0x100000000n, 0n, 0x100000000n], 71 [0x100000001n, 0n, 0x100000001n], 72 [0x7ffffffffffffffen, 0n, 0x7ffffffffffffffen], 73 [0x7fffffffffffffffn, 0n, 0x7fffffffffffffffn], 74 [-0x8000000000000000n, 1n, -0x7fffffffffffffffn], 75 [-0x7fffffffffffffffn, 1n, -0x7ffffffffffffffen], 76 [-0x7ffffffffffffffen, 1n, -0x7ffffffffffffffdn], 77 [-0x100000001n, 1n, -0x100000000n], 78 [-0x100000000n, 1n, -0xffffffffn], 79 [-0xffffffffn, 1n, -0xfffffffen], 80 [-0xfffffffen, 1n, -0xfffffffdn], 81 [-0x80000001n, 1n, -0x80000000n], 82 [-0x80000000n, 1n, -0x7fffffffn], 83 [-0x7fffffffn, 1n, -0x7ffffffen], 84 [-0x7ffffffen, 1n, -0x7ffffffdn], 85 [1n, 1n, 2n], 86 [2n, 1n, 3n], 87 [0x7ffffffen, 1n, 0x7fffffffn], 88 [0x7fffffffn, 1n, 0x80000000n], 89 [0x80000000n, 1n, 0x80000001n], 90 [0x80000001n, 1n, 0x80000002n], 91 [0xfffffffen, 1n, 0xffffffffn], 92 [0xffffffffn, 1n, 0x100000000n], 93 [0x100000000n, 1n, 0x100000001n], 94 [0x100000001n, 1n, 0x100000002n], 95 [0x7ffffffffffffffen, 1n, 0x7fffffffffffffffn], 96 [-0x8000000000000000n, 2n, -0x7ffffffffffffffen], 97 [-0x7fffffffffffffffn, 2n, -0x7ffffffffffffffdn], 98 [-0x7ffffffffffffffen, 2n, -0x7ffffffffffffffcn], 99 [-0x100000001n, 2n, -0xffffffffn], 100 [-0x100000000n, 2n, -0xfffffffen], 101 [-0xffffffffn, 2n, -0xfffffffdn], 102 [-0xfffffffen, 2n, -0xfffffffcn], 103 [-0x80000001n, 2n, -0x7fffffffn], 104 [-0x80000000n, 2n, -0x7ffffffen], 105 [-0x7fffffffn, 2n, -0x7ffffffdn], 106 [-0x7ffffffen, 2n, -0x7ffffffcn], 107 [2n, 2n, 4n], 108 [0x7ffffffen, 2n, 0x80000000n], 109 [0x7fffffffn, 2n, 0x80000001n], 110 [0x80000000n, 2n, 0x80000002n], 111 [0x80000001n, 2n, 0x80000003n], 112 [0xfffffffen, 2n, 0x100000000n], 113 [0xffffffffn, 2n, 0x100000001n], 114 [0x100000000n, 2n, 0x100000002n], 115 [0x100000001n, 2n, 0x100000003n], 116 [-0x8000000000000000n, 0x7ffffffen, -0x7fffffff80000002n], 117 [-0x7fffffffffffffffn, 0x7ffffffen, -0x7fffffff80000001n], 118 [-0x7ffffffffffffffen, 0x7ffffffen, -0x7fffffff80000000n], 119 [-0x100000001n, 0x7ffffffen, -0x80000003n], 120 [-0x100000000n, 0x7ffffffen, -0x80000002n], 121 [-0xffffffffn, 0x7ffffffen, -0x80000001n], 122 [-0xfffffffen, 0x7ffffffen, -0x80000000n], 123 [-0x80000001n, 0x7ffffffen, -3n], 124 [-0x80000000n, 0x7ffffffen, -2n], 125 [-0x7fffffffn, 0x7ffffffen, -1n], 126 [-0x7ffffffen, 0x7ffffffen, 0n], 127 [0x7ffffffen, 0x7ffffffen, 0xfffffffcn], 128 [0x7fffffffn, 0x7ffffffen, 0xfffffffdn], 129 [0x80000000n, 0x7ffffffen, 0xfffffffen], 130 [0x80000001n, 0x7ffffffen, 0xffffffffn], 131 [0xfffffffen, 0x7ffffffen, 0x17ffffffcn], 132 [0xffffffffn, 0x7ffffffen, 0x17ffffffdn], 133 [0x100000000n, 0x7ffffffen, 0x17ffffffen], 134 [0x100000001n, 0x7ffffffen, 0x17fffffffn], 135 [-0x8000000000000000n, 0x7fffffffn, -0x7fffffff80000001n], 136 [-0x7fffffffffffffffn, 0x7fffffffn, -0x7fffffff80000000n], 137 [-0x7ffffffffffffffen, 0x7fffffffn, -0x7fffffff7fffffffn], 138 [-0x100000001n, 0x7fffffffn, -0x80000002n], 139 [-0x100000000n, 0x7fffffffn, -0x80000001n], 140 [-0xffffffffn, 0x7fffffffn, -0x80000000n], 141 [-0xfffffffen, 0x7fffffffn, -0x7fffffffn], 142 [-0x80000001n, 0x7fffffffn, -2n], 143 [-0x80000000n, 0x7fffffffn, -1n], 144 [-0x7fffffffn, 0x7fffffffn, 0n], 145 [-0x7ffffffen, 0x7fffffffn, 1n], 146 [0x7fffffffn, 0x7fffffffn, 0xfffffffen], 147 [0x80000000n, 0x7fffffffn, 0xffffffffn], 148 [0x80000001n, 0x7fffffffn, 0x100000000n], 149 [0xfffffffen, 0x7fffffffn, 0x17ffffffdn], 150 [0xffffffffn, 0x7fffffffn, 0x17ffffffen], 151 [0x100000000n, 0x7fffffffn, 0x17fffffffn], 152 [0x100000001n, 0x7fffffffn, 0x180000000n], 153 [-0x8000000000000000n, 0x80000000n, -0x7fffffff80000000n], 154 [-0x7fffffffffffffffn, 0x80000000n, -0x7fffffff7fffffffn], 155 [-0x7ffffffffffffffen, 0x80000000n, -0x7fffffff7ffffffen], 156 [-0x100000001n, 0x80000000n, -0x80000001n], 157 [-0x100000000n, 0x80000000n, -0x80000000n], 158 [-0xffffffffn, 0x80000000n, -0x7fffffffn], 159 [-0xfffffffen, 0x80000000n, -0x7ffffffen], 160 [-0x80000001n, 0x80000000n, -1n], 161 [-0x80000000n, 0x80000000n, 0n], 162 [-0x7fffffffn, 0x80000000n, 1n], 163 [-0x7ffffffen, 0x80000000n, 2n], 164 [0x80000000n, 0x80000000n, 0x100000000n], 165 [0x80000001n, 0x80000000n, 0x100000001n], 166 [0xfffffffen, 0x80000000n, 0x17ffffffen], 167 [0xffffffffn, 0x80000000n, 0x17fffffffn], 168 [0x100000000n, 0x80000000n, 0x180000000n], 169 [0x100000001n, 0x80000000n, 0x180000001n], 170 [-0x8000000000000000n, 0x80000001n, -0x7fffffff7fffffffn], 171 [-0x7fffffffffffffffn, 0x80000001n, -0x7fffffff7ffffffen], 172 [-0x7ffffffffffffffen, 0x80000001n, -0x7fffffff7ffffffdn], 173 [-0x100000001n, 0x80000001n, -0x80000000n], 174 [-0x100000000n, 0x80000001n, -0x7fffffffn], 175 [-0xffffffffn, 0x80000001n, -0x7ffffffen], 176 [-0xfffffffen, 0x80000001n, -0x7ffffffdn], 177 [-0x80000001n, 0x80000001n, 0n], 178 [-0x80000000n, 0x80000001n, 1n], 179 [-0x7fffffffn, 0x80000001n, 2n], 180 [-0x7ffffffen, 0x80000001n, 3n], 181 [0x80000001n, 0x80000001n, 0x100000002n], 182 [0xfffffffen, 0x80000001n, 0x17fffffffn], 183 [0xffffffffn, 0x80000001n, 0x180000000n], 184 [0x100000000n, 0x80000001n, 0x180000001n], 185 [0x100000001n, 0x80000001n, 0x180000002n], 186 [-0x100000001n, -0x80000001n, -0x180000002n], 187 [-0x100000000n, -0x80000001n, -0x180000001n], 188 [-0xffffffffn, -0x80000001n, -0x180000000n], 189 [-0xfffffffen, -0x80000001n, -0x17fffffffn], 190 [-0x80000001n, -0x80000001n, -0x100000002n], 191 [-0x80000000n, -0x80000001n, -0x100000001n], 192 [-0x7fffffffn, -0x80000001n, -0x100000000n], 193 [-0x7ffffffen, -0x80000001n, -0xffffffffn], 194 [0xfffffffen, -0x80000001n, 0x7ffffffdn], 195 [0xffffffffn, -0x80000001n, 0x7ffffffen], 196 [0x100000000n, -0x80000001n, 0x7fffffffn], 197 [0x100000001n, -0x80000001n, 0x80000000n], 198 [0x7ffffffffffffffen, -0x80000001n, 0x7fffffff7ffffffdn], 199 [0x7fffffffffffffffn, -0x80000001n, 0x7fffffff7ffffffen], 200 [-0x100000001n, -0x80000000n, -0x180000001n], 201 [-0x100000000n, -0x80000000n, -0x180000000n], 202 [-0xffffffffn, -0x80000000n, -0x17fffffffn], 203 [-0xfffffffen, -0x80000000n, -0x17ffffffen], 204 [-0x80000000n, -0x80000000n, -0x100000000n], 205 [-0x7fffffffn, -0x80000000n, -0xffffffffn], 206 [-0x7ffffffen, -0x80000000n, -0xfffffffen], 207 [0xfffffffen, -0x80000000n, 0x7ffffffen], 208 [0xffffffffn, -0x80000000n, 0x7fffffffn], 209 [0x100000000n, -0x80000000n, 0x80000000n], 210 [0x100000001n, -0x80000000n, 0x80000001n], 211 [0x7ffffffffffffffen, -0x80000000n, 0x7fffffff7ffffffen], 212 [0x7fffffffffffffffn, -0x80000000n, 0x7fffffff7fffffffn], 213 [-0x100000001n, -0x7fffffffn, -0x180000000n], 214 [-0x100000000n, -0x7fffffffn, -0x17fffffffn], 215 [-0xffffffffn, -0x7fffffffn, -0x17ffffffen], 216 [-0xfffffffen, -0x7fffffffn, -0x17ffffffdn], 217 [-0x7fffffffn, -0x7fffffffn, -0xfffffffen], 218 [-0x7ffffffen, -0x7fffffffn, -0xfffffffdn], 219 [0xfffffffen, -0x7fffffffn, 0x7fffffffn], 220 [0xffffffffn, -0x7fffffffn, 0x80000000n], 221 [0x100000000n, -0x7fffffffn, 0x80000001n], 222 [0x100000001n, -0x7fffffffn, 0x80000002n], 223 [0x7ffffffffffffffen, -0x7fffffffn, 0x7fffffff7fffffffn], 224 [0x7fffffffffffffffn, -0x7fffffffn, 0x7fffffff80000000n], 225 [-0x100000001n, -0x7ffffffen, -0x17fffffffn], 226 [-0x100000000n, -0x7ffffffen, -0x17ffffffen], 227 [-0xffffffffn, -0x7ffffffen, -0x17ffffffdn], 228 [-0xfffffffen, -0x7ffffffen, -0x17ffffffcn], 229 [-0x7ffffffen, -0x7ffffffen, -0xfffffffcn], 230 [0xfffffffen, -0x7ffffffen, 0x80000000n], 231 [0xffffffffn, -0x7ffffffen, 0x80000001n], 232 [0x100000000n, -0x7ffffffen, 0x80000002n], 233 [0x100000001n, -0x7ffffffen, 0x80000003n], 234 [0x7ffffffffffffffen, -0x7ffffffen, 0x7fffffff80000000n], 235 [0x7fffffffffffffffn, -0x7ffffffen, 0x7fffffff80000001n], 236 [-0x8000000000000000n, 0xfffffffen, -0x7fffffff00000002n], 237 [-0x7fffffffffffffffn, 0xfffffffen, -0x7fffffff00000001n], 238 [-0x7ffffffffffffffen, 0xfffffffen, -0x7fffffff00000000n], 239 [-0x100000001n, 0xfffffffen, -3n], 240 [-0x100000000n, 0xfffffffen, -2n], 241 [-0xffffffffn, 0xfffffffen, -1n], 242 [-0xfffffffen, 0xfffffffen, 0n], 243 [0xfffffffen, 0xfffffffen, 0x1fffffffcn], 244 [0xffffffffn, 0xfffffffen, 0x1fffffffdn], 245 [0x100000000n, 0xfffffffen, 0x1fffffffen], 246 [0x100000001n, 0xfffffffen, 0x1ffffffffn], 247 [-0x8000000000000000n, 0xffffffffn, -0x7fffffff00000001n], 248 [-0x7fffffffffffffffn, 0xffffffffn, -0x7fffffff00000000n], 249 [-0x7ffffffffffffffen, 0xffffffffn, -0x7ffffffeffffffffn], 250 [-0x100000001n, 0xffffffffn, -2n], 251 [-0x100000000n, 0xffffffffn, -1n], 252 [-0xffffffffn, 0xffffffffn, 0n], 253 [-0xfffffffen, 0xffffffffn, 1n], 254 [0xffffffffn, 0xffffffffn, 0x1fffffffen], 255 [0x100000000n, 0xffffffffn, 0x1ffffffffn], 256 [0x100000001n, 0xffffffffn, 0x200000000n], 257 [-0x8000000000000000n, 0x100000000n, -0x7fffffff00000000n], 258 [-0x7fffffffffffffffn, 0x100000000n, -0x7ffffffeffffffffn], 259 [-0x7ffffffffffffffen, 0x100000000n, -0x7ffffffefffffffen], 260 [-0x100000001n, 0x100000000n, -1n], 261 [-0x100000000n, 0x100000000n, 0n], 262 [-0xffffffffn, 0x100000000n, 1n], 263 [-0xfffffffen, 0x100000000n, 2n], 264 [0x100000000n, 0x100000000n, 0x200000000n], 265 [0x100000001n, 0x100000000n, 0x200000001n], 266 [-0x8000000000000000n, 0x100000001n, -0x7ffffffeffffffffn], 267 [-0x7fffffffffffffffn, 0x100000001n, -0x7ffffffefffffffen], 268 [-0x7ffffffffffffffen, 0x100000001n, -0x7ffffffefffffffdn], 269 [-0x100000001n, 0x100000001n, 0n], 270 [-0x100000000n, 0x100000001n, 1n], 271 [-0xffffffffn, 0x100000001n, 2n], 272 [-0xfffffffen, 0x100000001n, 3n], 273 [0x100000001n, 0x100000001n, 0x200000002n], 274 [-0x100000001n, -0x100000001n, -0x200000002n], 275 [-0x100000000n, -0x100000001n, -0x200000001n], 276 [-0xffffffffn, -0x100000001n, -0x200000000n], 277 [-0xfffffffen, -0x100000001n, -0x1ffffffffn], 278 [0x7ffffffffffffffen, -0x100000001n, 0x7ffffffefffffffdn], 279 [0x7fffffffffffffffn, -0x100000001n, 0x7ffffffefffffffen], 280 [-0x100000000n, -0x100000000n, -0x200000000n], 281 [-0xffffffffn, -0x100000000n, -0x1ffffffffn], 282 [-0xfffffffen, -0x100000000n, -0x1fffffffen], 283 [0x7ffffffffffffffen, -0x100000000n, 0x7ffffffefffffffen], 284 [0x7fffffffffffffffn, -0x100000000n, 0x7ffffffeffffffffn], 285 [-0xffffffffn, -0xffffffffn, -0x1fffffffen], 286 [-0xfffffffen, -0xffffffffn, -0x1fffffffdn], 287 [0x7ffffffffffffffen, -0xffffffffn, 0x7ffffffeffffffffn], 288 [0x7fffffffffffffffn, -0xffffffffn, 0x7fffffff00000000n], 289 [-0xfffffffen, -0xfffffffen, -0x1fffffffcn], 290 [0x7ffffffffffffffen, -0xfffffffen, 0x7fffffff00000000n], 291 [0x7fffffffffffffffn, -0xfffffffen, 0x7fffffff00000001n], 292 [-0x8000000000000000n, 0x7ffffffffffffffen, -2n], 293 [-0x7fffffffffffffffn, 0x7ffffffffffffffen, -1n], 294 [-0x7ffffffffffffffen, 0x7ffffffffffffffen, 0n], 295 [-0x8000000000000000n, 0x7fffffffffffffffn, -1n], 296 [-0x7fffffffffffffffn, 0x7fffffffffffffffn, 0n], 297 [-0x7ffffffffffffffen, 0x7fffffffffffffffn, 1n], 298 ]; 299 300 function f(tests) { 301 for (let test of tests) { 302 let lhs = test[0], rhs = test[1], expected = test[2]; 303 assertEq(BigInt.asIntN(64, lhs), lhs); 304 assertEq(BigInt.asIntN(64, rhs), rhs); 305 assertEq(BigInt.asIntN(64, expected), expected); 306 307 assertEq(lhs + rhs, expected); 308 assertEq(rhs + lhs, expected); 309 } 310 } 311 312 for (let i = 0; i < 10; ++i) { 313 f(tests); 314 }