bigint-compare-fold-int32.js (1402B)
1 // Fold BigInt x Int32 comparison with constants. 2 3 let bigInts = [ 4 // Definitely heap digits. 5 -(2n ** 1000n), 6 7 // Definitely not heap digits. 8 -1n, 9 0n, 10 1n, 11 12 // Definitely heap digits. 13 2n ** 1000n, 14 ]; 15 16 let int32s = [ 17 -0x8000_0000, 18 -1, 19 0, 20 1, 21 0x7fff_ffff, 22 ]; 23 24 function test() { 25 for (var i = 0; i < 100; ++i) { 26 let lhs = LHS; 27 let rhs = RHS; 28 29 assertEq(lhs === rhs, false); 30 assertEq(rhs === lhs, false); 31 32 assertEq(lhs !== rhs, true); 33 assertEq(rhs !== lhs, true); 34 35 assertEq(lhs == rhs, EQUALS); 36 assertEq(rhs == lhs, EQUALS); 37 38 assertEq(lhs != rhs, !EQUALS); 39 assertEq(rhs != lhs, !EQUALS); 40 41 assertEq(lhs < rhs, LESS_THAN); 42 assertEq(rhs < lhs, !LESS_THAN && !EQUALS); 43 44 assertEq(lhs <= rhs, LESS_THAN || EQUALS); 45 assertEq(rhs <= lhs, !LESS_THAN || EQUALS); 46 47 assertEq(lhs > rhs, !LESS_THAN && !EQUALS); 48 assertEq(rhs > lhs, LESS_THAN); 49 50 assertEq(lhs >= rhs, !LESS_THAN || EQUALS); 51 assertEq(rhs >= lhs, LESS_THAN || EQUALS); 52 } 53 } 54 55 for (let lhs of bigInts) { 56 for (let rhs of int32s) { 57 // Ensure Int32-typed. 58 rhs |= 0; 59 60 let equals = lhs == rhs; 61 let lessThan = lhs < rhs; 62 let fn = Function( 63 `return ${test}` 64 .replaceAll("LHS", `${lhs}n`) 65 .replaceAll("RHS", `${rhs}`) 66 .replaceAll("EQUALS", `${equals}`) 67 .replaceAll("LESS_THAN", `${lessThan}`) 68 )(); 69 fn(); 70 } 71 }