bigint-pow-32.js (2831B)
1 const tests = [ 2 [-0x80000000n, 0n, 1n], 3 [-0x7fffffffn, 0n, 1n], 4 [-0x7ffffffen, 0n, 1n], 5 [-9n, 0n, 1n], 6 [-8n, 0n, 1n], 7 [-7n, 0n, 1n], 8 [-6n, 0n, 1n], 9 [-5n, 0n, 1n], 10 [-4n, 0n, 1n], 11 [-3n, 0n, 1n], 12 [-2n, 0n, 1n], 13 [-1n, 0n, 1n], 14 [0n, 0n, 1n], 15 [1n, 0n, 1n], 16 [2n, 0n, 1n], 17 [3n, 0n, 1n], 18 [4n, 0n, 1n], 19 [5n, 0n, 1n], 20 [6n, 0n, 1n], 21 [7n, 0n, 1n], 22 [8n, 0n, 1n], 23 [9n, 0n, 1n], 24 [0x7ffffffen, 0n, 1n], 25 [0x7fffffffn, 0n, 1n], 26 [-0x80000000n, 1n, -0x80000000n], 27 [-0x7fffffffn, 1n, -0x7fffffffn], 28 [-0x7ffffffen, 1n, -0x7ffffffen], 29 [-9n, 1n, -9n], 30 [-8n, 1n, -8n], 31 [-7n, 1n, -7n], 32 [-6n, 1n, -6n], 33 [-5n, 1n, -5n], 34 [-4n, 1n, -4n], 35 [-3n, 1n, -3n], 36 [-2n, 1n, -2n], 37 [-1n, 1n, -1n], 38 [0n, 1n, 0n], 39 [1n, 1n, 1n], 40 [2n, 1n, 2n], 41 [3n, 1n, 3n], 42 [4n, 1n, 4n], 43 [5n, 1n, 5n], 44 [6n, 1n, 6n], 45 [7n, 1n, 7n], 46 [8n, 1n, 8n], 47 [9n, 1n, 9n], 48 [0x7ffffffen, 1n, 0x7ffffffen], 49 [0x7fffffffn, 1n, 0x7fffffffn], 50 [-9n, 2n, 0x51n], 51 [-8n, 2n, 0x40n], 52 [-7n, 2n, 0x31n], 53 [-6n, 2n, 0x24n], 54 [-5n, 2n, 0x19n], 55 [-4n, 2n, 0x10n], 56 [-3n, 2n, 9n], 57 [-2n, 2n, 4n], 58 [-1n, 2n, 1n], 59 [0n, 2n, 0n], 60 [1n, 2n, 1n], 61 [2n, 2n, 4n], 62 [3n, 2n, 9n], 63 [4n, 2n, 0x10n], 64 [5n, 2n, 0x19n], 65 [6n, 2n, 0x24n], 66 [7n, 2n, 0x31n], 67 [8n, 2n, 0x40n], 68 [9n, 2n, 0x51n], 69 [-9n, 3n, -0x2d9n], 70 [-8n, 3n, -0x200n], 71 [-7n, 3n, -0x157n], 72 [-6n, 3n, -0xd8n], 73 [-5n, 3n, -0x7dn], 74 [-4n, 3n, -0x40n], 75 [-3n, 3n, -0x1bn], 76 [-2n, 3n, -8n], 77 [-1n, 3n, -1n], 78 [0n, 3n, 0n], 79 [1n, 3n, 1n], 80 [2n, 3n, 8n], 81 [3n, 3n, 0x1bn], 82 [4n, 3n, 0x40n], 83 [5n, 3n, 0x7dn], 84 [6n, 3n, 0xd8n], 85 [7n, 3n, 0x157n], 86 [8n, 3n, 0x200n], 87 [9n, 3n, 0x2d9n], 88 [-9n, 4n, 0x19a1n], 89 [-8n, 4n, 0x1000n], 90 [-7n, 4n, 0x961n], 91 [-6n, 4n, 0x510n], 92 [-5n, 4n, 0x271n], 93 [-4n, 4n, 0x100n], 94 [-3n, 4n, 0x51n], 95 [-2n, 4n, 0x10n], 96 [-1n, 4n, 1n], 97 [0n, 4n, 0n], 98 [1n, 4n, 1n], 99 [2n, 4n, 0x10n], 100 [3n, 4n, 0x51n], 101 [4n, 4n, 0x100n], 102 [5n, 4n, 0x271n], 103 [6n, 4n, 0x510n], 104 [7n, 4n, 0x961n], 105 [8n, 4n, 0x1000n], 106 [9n, 4n, 0x19a1n], 107 [-2n, 0x1fn, -0x80000000n], 108 [-1n, 0x1fn, -1n], 109 [0n, 0x1fn, 0n], 110 [1n, 0x1fn, 1n], 111 [-1n, 0x20n, 1n], 112 [0n, 0x20n, 0n], 113 [1n, 0x20n, 1n], 114 [-1n, 0x3fn, -1n], 115 [0n, 0x3fn, 0n], 116 [1n, 0x3fn, 1n], 117 [-1n, 0x40n, 1n], 118 [0n, 0x40n, 0n], 119 [1n, 0x40n, 1n], 120 ]; 121 122 // Cases not covered above. 123 tests.push( 124 // 0 ** (2**31) 125 [0n, 0x7fffffffn, 0n], 126 127 // 1 ** (2**31) 128 [1n, 0x7fffffffn, 1n], 129 130 // -1 ** (2**31) 131 [-1n, 0x7fffffffn, -1n], 132 ); 133 134 function f(tests) { 135 for (let test of tests) { 136 let lhs = test[0], rhs = test[1], expected = test[2]; 137 assertEq(BigInt.asIntN(32, lhs), lhs); 138 assertEq(BigInt.asIntN(32, rhs), rhs); 139 assertEq(BigInt.asIntN(32, expected), expected); 140 141 assertEq(lhs ** rhs, expected); 142 } 143 } 144 145 for (let i = 0; i < 10; ++i) { 146 f(tests); 147 }