bigint-compare-fold-bigint.js (1305B)
1 // Fold BigInt x BigInt 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 function test() { 17 for (var i = 0; i < 100; ++i) { 18 let lhs = LHS; 19 let rhs = RHS; 20 21 assertEq(lhs === rhs, EQUALS); 22 assertEq(rhs === lhs, EQUALS); 23 24 assertEq(lhs !== rhs, !EQUALS); 25 assertEq(rhs !== lhs, !EQUALS); 26 27 assertEq(lhs == rhs, EQUALS); 28 assertEq(rhs == lhs, EQUALS); 29 30 assertEq(lhs != rhs, !EQUALS); 31 assertEq(rhs != lhs, !EQUALS); 32 33 assertEq(lhs < rhs, LESS_THAN); 34 assertEq(rhs < lhs, !LESS_THAN && !EQUALS); 35 36 assertEq(lhs <= rhs, LESS_THAN || EQUALS); 37 assertEq(rhs <= lhs, !LESS_THAN || EQUALS); 38 39 assertEq(lhs > rhs, !LESS_THAN && !EQUALS); 40 assertEq(rhs > lhs, LESS_THAN); 41 42 assertEq(lhs >= rhs, !LESS_THAN || EQUALS); 43 assertEq(rhs >= lhs, LESS_THAN || EQUALS); 44 } 45 } 46 47 for (let lhs of bigInts) { 48 for (let rhs of bigInts) { 49 let equals = lhs == rhs; 50 let lessThan = lhs < rhs; 51 let fn = Function( 52 `return ${test}` 53 .replaceAll("LHS", `${lhs}n`) 54 .replaceAll("RHS", `${rhs}n`) 55 .replaceAll("EQUALS", `${equals}`) 56 .replaceAll("LESS_THAN", `${lessThan}`) 57 )(); 58 fn(); 59 } 60 }