Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/js/src/jit-test/tests/warp/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 11 kB image not shown  

Quelle  bigintptr-cmp.js   Sprache: JAVA

 
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;

  assertEq(gcd(xs.length, ys.length), 1);
  assertEq(m * xs.length * ys.length <= n, true);
}

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);

    // BigInt constant
    assertEq(v == 0n, eq_zero);
    assertEq(v != 0n, !eq_zero);
    assertEq(v < 0n, lt_zero && !eq_zero);
    assertEq(v <= 0n, lt_zero || eq_zero);
    assertEq(v > 0n, !lt_zero && !eq_zero);
    assertEq(v >= 0n, !lt_zero || eq_zero);

    assertEq(v == 1n, eq_one);
    assertEq(v != 1n, !eq_one);
    assertEq(v < 1n, lt_one && !eq_one);
    assertEq(v <= 1n, lt_one || eq_one);
    assertEq(v > 1n, !lt_one && !eq_one);
    assertEq(v >= 1n, !lt_one || eq_one);

    assertEq(v == -1n, eq_neg_one);
    assertEq(v != -1n, !eq_neg_one);
    assertEq(v < -1n, lt_neg_one && !eq_neg_one);
    assertEq(v <= -1n, lt_neg_one || eq_neg_one);
    assertEq(v > -1n, !lt_neg_one && !eq_neg_one);
    assertEq(v >= -1n, !lt_neg_one || eq_neg_one);

    assertEq(v == 0x8000_0000n, eq_i31);
    assertEq(v != 0x8000_0000n, !eq_i31);
    assertEq(v < 0x8000_0000n, lt_i31 && !eq_i31);
    assertEq(v <= 0x8000_0000n, lt_i31 || eq_i31);
    assertEq(v > 0x8000_0000n, !lt_i31 && !eq_i31);
    assertEq(v >= 0x8000_0000n, !lt_i31 || eq_i31);

    assertEq(v == 0x1_0000_0000n, eq_i32);
    assertEq(v != 0x1_0000_0000n, !eq_i32);
    assertEq(v < 0x1_0000_0000n, lt_i32 && !eq_i32);
    assertEq(v <= 0x1_0000_0000n, lt_i32 || eq_i32);
    assertEq(v > 0x1_0000_0000n, !lt_i32 && !eq_i32);
    assertEq(v >= 0x1_0000_0000n, !lt_i32 || eq_i32);
  }
}
testIPtr();

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);

    // BigInt constant. (Reserved operands)
    assertEq(0n == v, eq_zero);
    assertEq(0n != v, !eq_zero);
    assertEq(0n > v, lt_zero && !eq_zero);
    assertEq(0n >= v, lt_zero || eq_zero);
    assertEq(0n < v, !lt_zero && !eq_zero);
    assertEq(0n <= v, !lt_zero || eq_zero);

    assertEq(1n == v, eq_one);
    assertEq(1n != v, !eq_one);
    assertEq(1n > v, lt_one && !eq_one);
    assertEq(1n >= v, lt_one || eq_one);
    assertEq(1n < v, !lt_one && !eq_one);
    assertEq(1n <= v, !lt_one || eq_one);

    assertEq(-1n == v, eq_neg_one);
    assertEq(-1n != v, !eq_neg_one);
    assertEq(-1n > v, lt_neg_one && !eq_neg_one);
    assertEq(-1n >= v, lt_neg_one || eq_neg_one);
    assertEq(-1n < v, !lt_neg_one && !eq_neg_one);
    assertEq(-1n <= v, !lt_neg_one || eq_neg_one);

    assertEq(0x8000_0000n == v, eq_i31);
    assertEq(0x8000_0000n != v, !eq_i31);
    assertEq(0x8000_0000n > v, lt_i31 && !eq_i31);
    assertEq(0x8000_0000n >= v, lt_i31 || eq_i31);
    assertEq(0x8000_0000n < v, !lt_i31 && !eq_i31);
    assertEq(0x8000_0000n <= v, !lt_i31 || eq_i31);

    assertEq(0x1_0000_0000n == v, eq_i32);
    assertEq(0x1_0000_0000n != v, !eq_i32);
    assertEq(0x1_0000_0000n > v, lt_i32 && !eq_i32);
    assertEq(0x1_0000_0000n >= v, lt_i32 || eq_i32);
    assertEq(0x1_0000_0000n < v, !lt_i32 && !eq_i32);
    assertEq(0x1_0000_0000n <= v, !lt_i32 || eq_i32);
  }
}
testIPtr_R();

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);

    // Int32 constant
    assertEq(v == 0, eq_zero);
    assertEq(v != 0, !eq_zero);
    assertEq(v < 0, lt_zero && !eq_zero);
    assertEq(v <= 0, lt_zero || eq_zero);
    assertEq(v > 0, !lt_zero && !eq_zero);
    assertEq(v >= 0, !lt_zero || eq_zero);

    assertEq(v == 1, eq_one);
    assertEq(v != 1, !eq_one);
    assertEq(v < 1, lt_one && !eq_one);
    assertEq(v <= 1, lt_one || eq_one);
    assertEq(v > 1, !lt_one && !eq_one);
    assertEq(v >= 1, !lt_one || eq_one);

    assertEq(v == -1, eq_neg_one);
    assertEq(v != -1, !eq_neg_one);
    assertEq(v < -1, lt_neg_one && !eq_neg_one);
    assertEq(v <= -1, lt_neg_one || eq_neg_one);
    assertEq(v > -1, !lt_neg_one && !eq_neg_one);
    assertEq(v >= -1, !lt_neg_one || eq_neg_one);
  }
}
testIPtr_I32Constant();

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);

    // Int32 constant. (Reversed operands)
    assertEq(0 == v, eq_zero);
    assertEq(0 != v, !eq_zero);
    assertEq(0 > v, lt_zero && !eq_zero);
    assertEq(0 >= v, lt_zero || eq_zero);
    assertEq(0 < v, !lt_zero && !eq_zero);
    assertEq(0 <= v, !lt_zero || eq_zero);

    assertEq(1 == v, eq_one);
    assertEq(1 != v, !eq_one);
    assertEq(1 > v, lt_one && !eq_one);
    assertEq(1 >= v, lt_one || eq_one);
    assertEq(1 < v, !lt_one && !eq_one);
    assertEq(1 <= v, !lt_one || eq_one);

    assertEq(-1 == v, eq_neg_one);
    assertEq(-1 != v, !eq_neg_one);
    assertEq(-1 > v, lt_neg_one && !eq_neg_one);
    assertEq(-1 >= v, lt_neg_one || eq_neg_one);
    assertEq(-1 < v, !lt_neg_one && !eq_neg_one);
    assertEq(-1 <= v, !lt_neg_one || eq_neg_one);
  }
}
testIPtr_I32Constant_R();

function testIPtr_TooLargeConstant() {
  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;

    // BigInt constant too large for I64.
    assertEq(v == 0x8000_0000_0000_0000n, false);
    assertEq(v != 0x8000_0000_0000_0000n, true);
    assertEq(v < 0x8000_0000_0000_0000n, true);
    assertEq(v <= 0x8000_0000_0000_0000n, true);
    assertEq(v > 0x8000_0000_0000_0000n, false);
    assertEq(v >= 0x8000_0000_0000_0000n, false);

    assertEq(v == -0x8000_0000_0000_0001n, false);
    assertEq(v != -0x8000_0000_0000_0001n, true);
    assertEq(v < -0x8000_0000_0000_0001n, false);
    assertEq(v <= -0x8000_0000_0000_0001n, false);
    assertEq(v > -0x8000_0000_0000_0001n, true);
    assertEq(v >= -0x8000_0000_0000_0001n, true);

    assertEq(v == 0x1_0000_0000_0000_0000n, false);
    assertEq(v != 0x1_0000_0000_0000_0000n, true);
    assertEq(v < 0x1_0000_0000_0000_0000n, true);
    assertEq(v <= 0x1_0000_0000_0000_0000n, true);
    assertEq(v > 0x1_0000_0000_0000_0000n, false);
    assertEq(v >= 0x1_0000_0000_0000_0000n, false);
  }
}
testIPtr_TooLargeConstant();

function testIPtr_TooLargeConstant_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;

    // BigInt constant too large for I64. (Reserved operands)
    assertEq(0x8000_0000_0000_0000n == v, false);
    assertEq(0x8000_0000_0000_0000n != v, true);
    assertEq(0x8000_0000_0000_0000n > v, true);
    assertEq(0x8000_0000_0000_0000n >= v, true);
    assertEq(0x8000_0000_0000_0000n < v, false);
    assertEq(0x8000_0000_0000_0000n <= v, false);

    assertEq(-0x8000_0000_0000_0001n == v, false);
    assertEq(-0x8000_0000_0000_0001n != v, true);
    assertEq(-0x8000_0000_0000_0001n > v, false);
    assertEq(-0x8000_0000_0000_0001n >= v, false);
    assertEq(-0x8000_0000_0000_0001n < v, true);
    assertEq(-0x8000_0000_0000_0001n <= v, true);

    assertEq(0x1_0000_0000_0000_0000n == v, false);
    assertEq(0x1_0000_0000_0000_0000n != v, true);
    assertEq(0x1_0000_0000_0000_0000n > v, true);
    assertEq(0x1_0000_0000_0000_0000n >= v, true);
    assertEq(0x1_0000_0000_0000_0000n < v, false);
    assertEq(0x1_0000_0000_0000_0000n <= v, false);
  }
}
testIPtr_TooLargeConstant_R();

// Compare IntPtr against IntPtr.
function testIIPtr() {
  var r64 = fillWithZeros(i64);
  assertAllCombinationsTested(i64, r64, 500);

  for (var i = 0; i < 500; ++i) {
    var v = i64[i % i64.length];
    var w = r64[i % r64.length];

    // Apply an operation to execute BigInt as IntPtr codepaths.
    var x = v < 0 ? 1n : v > 0 ? -1n : 0n;
    v += x;
    w += x;

    // Cast to Int128 to ensure non-optimized BigInt comparison is used.
    var eq = v == BigInt.asIntN(128, w);
    var lt = v < BigInt.asIntN(128, w);

    assertEq(v == w, eq);
    assertEq(v != w, !eq);
    assertEq(v < w, lt && !eq);
    assertEq(v <= w, lt || eq);
    assertEq(v > w, !lt && !eq);
    assertEq(v >= w, !lt || eq);
  }
}
testIIPtr();

Messung V0.5
C=92 H=84 G=87

¤ Dauer der Verarbeitung: 0.5 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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.