const i64 = new BigInt64Array([
-0x8000_0000n,
-0x7fff_ffffn,
-1n,
0n,
1n,
0x7fff_ffffn,
]);
function gcd(a, b) {
a |= 0;
b |= 0; while (b !== 0) {
[a, b] = [b, a % b];
} return Math.abs(a);
}
function assertAllCombinationsTested(xs, ys, n) { // If the array lengths are relatively prime and their product is at least // |n| long, all possible combinations are tested at least once. Make sure // we test each combination at least three times. var m = 3;
function fillWithZeros(ta) {
let length = ta.length;
let zeros = 1; while (gcd(length, length + zeros) !== 1) {
zeros++;
}
let result = new ta.constructor(length + zeros);
result.set(ta); return result;
}
function testIPtr() { for (var i = 0; i < 200; ++i) { var v = i64[i % i64.length];
// Apply an operation to execute BigInt as IntPtr codepaths. var x = v < 0 ? 1n : v > 0 ? -1n : 0n;
v += x;
// Cast to Int128 to ensure non-optimized BigInt comparison is used. var eq_zero = v == BigInt.asIntN(128, 0n); var lt_zero = v < BigInt.asIntN(128, 0n);
var eq_one = v == BigInt.asIntN(128, 1n); var lt_one = v < BigInt.asIntN(128, 1n);
var eq_neg_one = v == BigInt.asIntN(128, -1n); var lt_neg_one = v < BigInt.asIntN(128, -1n);
var eq_i31 = v == BigInt.asIntN(128, 0x8000_0000n); var lt_i31 = v < BigInt.asIntN(128, 0x8000_0000n);
var eq_i32 = v == BigInt.asIntN(128, 0x1_0000_0000n); var lt_i32 = v < BigInt.asIntN(128, 0x1_0000_0000n);
function testIPtr_R() { for (var i = 0; i < 200; ++i) { var v = i64[i % i64.length];
// Apply an operation to execute BigInt as IntPtr codepaths. var x = v < 0 ? 1n : v > 0 ? -1n : 0n;
v += x;
// Cast to Int128 to ensure non-optimized BigInt comparison is used. var eq_zero = v == BigInt.asIntN(128, 0n); var lt_zero = v < BigInt.asIntN(128, 0n);
var eq_one = v == BigInt.asIntN(128, 1n); var lt_one = v < BigInt.asIntN(128, 1n);
var eq_neg_one = v == BigInt.asIntN(128, -1n); var lt_neg_one = v < BigInt.asIntN(128, -1n);
var eq_i31 = v == BigInt.asIntN(128, 0x8000_0000n); var lt_i31 = v < BigInt.asIntN(128, 0x8000_0000n);
var eq_i32 = v == BigInt.asIntN(128, 0x1_0000_0000n); var lt_i32 = v < BigInt.asIntN(128, 0x1_0000_0000n);
function testIPtr_I32Constant() { for (var i = 0; i < 200; ++i) { var v = i64[i % i64.length];
// Apply an operation to execute BigInt as IntPtr codepaths. var x = v < 0 ? 1n : v > 0 ? -1n : 0n;
v += x;
// Cast to Int128 to ensure non-optimized BigInt comparison is used. var eq_zero = v == BigInt.asIntN(128, 0n); var lt_zero = v < BigInt.asIntN(128, 0n);
var eq_one = v == BigInt.asIntN(128, 1n); var lt_one = v < BigInt.asIntN(128, 1n);
var eq_neg_one = v == BigInt.asIntN(128, -1n); var lt_neg_one = v < BigInt.asIntN(128, -1n);
var eq_i31 = v == BigInt.asIntN(128, 0x8000_0000n); var lt_i31 = v < BigInt.asIntN(128, 0x8000_0000n);
var eq_i32 = v == BigInt.asIntN(128, 0x1_0000_0000n); var lt_i32 = v < BigInt.asIntN(128, 0x1_0000_0000n);
function testIPtr_I32Constant_R() { for (var i = 0; i < 200; ++i) { var v = i64[i % i64.length];
// Apply an operation to execute BigInt as IntPtr codepaths. var x = v < 0 ? 1n : v > 0 ? -1n : 0n;
v += x;
// Cast to Int128 to ensure non-optimized BigInt comparison is used. var eq_zero = v == BigInt.asIntN(128, 0n); var lt_zero = v < BigInt.asIntN(128, 0n);
var eq_one = v == BigInt.asIntN(128, 1n); var lt_one = v < BigInt.asIntN(128, 1n);
var eq_neg_one = v == BigInt.asIntN(128, -1n); var lt_neg_one = v < BigInt.asIntN(128, -1n);
var eq_i31 = v == BigInt.asIntN(128, 0x8000_0000n); var lt_i31 = v < BigInt.asIntN(128, 0x8000_0000n);
var eq_i32 = v == BigInt.asIntN(128, 0x1_0000_0000n); var lt_i32 = v < BigInt.asIntN(128, 0x1_0000_0000n);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.