bigint-pow-64.js (5260B)
1 const tests = [ 2 [-0x8000000000000000n, 0n, 1n], 3 [-0x7fffffffffffffffn, 0n, 1n], 4 [-0x7ffffffffffffffen, 0n, 1n], 5 [-0x100000001n, 0n, 1n], 6 [-0x100000000n, 0n, 1n], 7 [-0xffffffffn, 0n, 1n], 8 [-0xfffffffen, 0n, 1n], 9 [-0x80000001n, 0n, 1n], 10 [-0x80000000n, 0n, 1n], 11 [-0x7fffffffn, 0n, 1n], 12 [-0x7ffffffen, 0n, 1n], 13 [-9n, 0n, 1n], 14 [-8n, 0n, 1n], 15 [-7n, 0n, 1n], 16 [-6n, 0n, 1n], 17 [-5n, 0n, 1n], 18 [-4n, 0n, 1n], 19 [-3n, 0n, 1n], 20 [-2n, 0n, 1n], 21 [-1n, 0n, 1n], 22 [0n, 0n, 1n], 23 [1n, 0n, 1n], 24 [2n, 0n, 1n], 25 [3n, 0n, 1n], 26 [4n, 0n, 1n], 27 [5n, 0n, 1n], 28 [6n, 0n, 1n], 29 [7n, 0n, 1n], 30 [8n, 0n, 1n], 31 [9n, 0n, 1n], 32 [0x7ffffffen, 0n, 1n], 33 [0x7fffffffn, 0n, 1n], 34 [0x80000000n, 0n, 1n], 35 [0x80000001n, 0n, 1n], 36 [0xfffffffen, 0n, 1n], 37 [0xffffffffn, 0n, 1n], 38 [0x100000000n, 0n, 1n], 39 [0x100000001n, 0n, 1n], 40 [0x7ffffffffffffffen, 0n, 1n], 41 [0x7fffffffffffffffn, 0n, 1n], 42 [-0x8000000000000000n, 1n, -0x8000000000000000n], 43 [-0x7fffffffffffffffn, 1n, -0x7fffffffffffffffn], 44 [-0x7ffffffffffffffen, 1n, -0x7ffffffffffffffen], 45 [-0x100000001n, 1n, -0x100000001n], 46 [-0x100000000n, 1n, -0x100000000n], 47 [-0xffffffffn, 1n, -0xffffffffn], 48 [-0xfffffffen, 1n, -0xfffffffen], 49 [-0x80000001n, 1n, -0x80000001n], 50 [-0x80000000n, 1n, -0x80000000n], 51 [-0x7fffffffn, 1n, -0x7fffffffn], 52 [-0x7ffffffen, 1n, -0x7ffffffen], 53 [-9n, 1n, -9n], 54 [-8n, 1n, -8n], 55 [-7n, 1n, -7n], 56 [-6n, 1n, -6n], 57 [-5n, 1n, -5n], 58 [-4n, 1n, -4n], 59 [-3n, 1n, -3n], 60 [-2n, 1n, -2n], 61 [-1n, 1n, -1n], 62 [0n, 1n, 0n], 63 [1n, 1n, 1n], 64 [2n, 1n, 2n], 65 [3n, 1n, 3n], 66 [4n, 1n, 4n], 67 [5n, 1n, 5n], 68 [6n, 1n, 6n], 69 [7n, 1n, 7n], 70 [8n, 1n, 8n], 71 [9n, 1n, 9n], 72 [0x7ffffffen, 1n, 0x7ffffffen], 73 [0x7fffffffn, 1n, 0x7fffffffn], 74 [0x80000000n, 1n, 0x80000000n], 75 [0x80000001n, 1n, 0x80000001n], 76 [0xfffffffen, 1n, 0xfffffffen], 77 [0xffffffffn, 1n, 0xffffffffn], 78 [0x100000000n, 1n, 0x100000000n], 79 [0x100000001n, 1n, 0x100000001n], 80 [0x7ffffffffffffffen, 1n, 0x7ffffffffffffffen], 81 [0x7fffffffffffffffn, 1n, 0x7fffffffffffffffn], 82 [-0x80000001n, 2n, 0x4000000100000001n], 83 [-0x80000000n, 2n, 0x4000000000000000n], 84 [-0x7fffffffn, 2n, 0x3fffffff00000001n], 85 [-0x7ffffffen, 2n, 0x3ffffffe00000004n], 86 [-9n, 2n, 0x51n], 87 [-8n, 2n, 0x40n], 88 [-7n, 2n, 0x31n], 89 [-6n, 2n, 0x24n], 90 [-5n, 2n, 0x19n], 91 [-4n, 2n, 0x10n], 92 [-3n, 2n, 9n], 93 [-2n, 2n, 4n], 94 [-1n, 2n, 1n], 95 [0n, 2n, 0n], 96 [1n, 2n, 1n], 97 [2n, 2n, 4n], 98 [3n, 2n, 9n], 99 [4n, 2n, 0x10n], 100 [5n, 2n, 0x19n], 101 [6n, 2n, 0x24n], 102 [7n, 2n, 0x31n], 103 [8n, 2n, 0x40n], 104 [9n, 2n, 0x51n], 105 [0x7ffffffen, 2n, 0x3ffffffe00000004n], 106 [0x7fffffffn, 2n, 0x3fffffff00000001n], 107 [0x80000000n, 2n, 0x4000000000000000n], 108 [0x80000001n, 2n, 0x4000000100000001n], 109 [-9n, 3n, -0x2d9n], 110 [-8n, 3n, -0x200n], 111 [-7n, 3n, -0x157n], 112 [-6n, 3n, -0xd8n], 113 [-5n, 3n, -0x7dn], 114 [-4n, 3n, -0x40n], 115 [-3n, 3n, -0x1bn], 116 [-2n, 3n, -8n], 117 [-1n, 3n, -1n], 118 [0n, 3n, 0n], 119 [1n, 3n, 1n], 120 [2n, 3n, 8n], 121 [3n, 3n, 0x1bn], 122 [4n, 3n, 0x40n], 123 [5n, 3n, 0x7dn], 124 [6n, 3n, 0xd8n], 125 [7n, 3n, 0x157n], 126 [8n, 3n, 0x200n], 127 [9n, 3n, 0x2d9n], 128 [-9n, 4n, 0x19a1n], 129 [-8n, 4n, 0x1000n], 130 [-7n, 4n, 0x961n], 131 [-6n, 4n, 0x510n], 132 [-5n, 4n, 0x271n], 133 [-4n, 4n, 0x100n], 134 [-3n, 4n, 0x51n], 135 [-2n, 4n, 0x10n], 136 [-1n, 4n, 1n], 137 [0n, 4n, 0n], 138 [1n, 4n, 1n], 139 [2n, 4n, 0x10n], 140 [3n, 4n, 0x51n], 141 [4n, 4n, 0x100n], 142 [5n, 4n, 0x271n], 143 [6n, 4n, 0x510n], 144 [7n, 4n, 0x961n], 145 [8n, 4n, 0x1000n], 146 [9n, 4n, 0x19a1n], 147 [-4n, 0x1fn, -0x4000000000000000n], 148 [-3n, 0x1fn, -0x231c54b5f6a2bn], 149 [-2n, 0x1fn, -0x80000000n], 150 [-1n, 0x1fn, -1n], 151 [0n, 0x1fn, 0n], 152 [1n, 0x1fn, 1n], 153 [2n, 0x1fn, 0x80000000n], 154 [3n, 0x1fn, 0x231c54b5f6a2bn], 155 [4n, 0x1fn, 0x4000000000000000n], 156 [-3n, 0x20n, 0x6954fe21e3e81n], 157 [-2n, 0x20n, 0x100000000n], 158 [-1n, 0x20n, 1n], 159 [0n, 0x20n, 0n], 160 [1n, 0x20n, 1n], 161 [2n, 0x20n, 0x100000000n], 162 [3n, 0x20n, 0x6954fe21e3e81n], 163 [-2n, 0x3fn, -0x8000000000000000n], 164 [-1n, 0x3fn, -1n], 165 [0n, 0x3fn, 0n], 166 [1n, 0x3fn, 1n], 167 [-1n, 0x40n, 1n], 168 [0n, 0x40n, 0n], 169 [1n, 0x40n, 1n], 170 ]; 171 172 // Cases not covered above. 173 tests.push( 174 // 0 ** (2**31) 175 // 0 ** (2**32) 176 // 0 ** (2**63) 177 // 0 ** (2**64) 178 [0n, 0x7fffffffn, 0n], 179 [0n, 0x80000000n, 0n], 180 [0n, 0x80000001n, 0n], 181 [0n, 0xffffffffn, 0n], 182 [0n, 0x100000000n, 0n], 183 [0n, 0x100000001n, 0n], 184 [0n, 0x7fffffffffffffffn, 0n], 185 186 // 1 ** (2**31) 187 // 1 ** (2**32) 188 // 1 ** (2**63) 189 // 1 ** (2**64) 190 [1n, 0x7fffffffn, 1n], 191 [1n, 0x80000000n, 1n], 192 [1n, 0x80000001n, 1n], 193 [1n, 0xffffffffn, 1n], 194 [1n, 0x100000000n, 1n], 195 [1n, 0x100000001n, 1n], 196 [1n, 0x7fffffffffffffffn, 1n], 197 198 // -1 ** (2**31) 199 // -1 ** (2**32) 200 // -1 ** (2**63) 201 // -1 ** (2**64) 202 [-1n, 0x7fffffffn, -1n], 203 [-1n, 0x80000000n, 1n], 204 [-1n, 0x80000001n, -1n], 205 [-1n, 0xffffffffn, -1n], 206 [-1n, 0x100000000n, 1n], 207 [-1n, 0x100000001n, -1n], 208 [-1n, 0x7fffffffffffffffn, -1n], 209 ); 210 211 function f(tests) { 212 for (let test of tests) { 213 let lhs = test[0], rhs = test[1], expected = test[2]; 214 assertEq(BigInt.asIntN(64, lhs), lhs); 215 assertEq(BigInt.asIntN(64, rhs), rhs); 216 assertEq(BigInt.asIntN(64, expected), expected); 217 218 assertEq(lhs ** rhs, expected); 219 } 220 } 221 222 for (let i = 0; i < 10; ++i) { 223 f(tests); 224 }