// |jit-test| test-join=--spectre-mitigations=off
// These do not test atomicity, just that code generation for BigInt values
// works correctly.
const bigIntValues = [
// Definitely heap digits.
-(2 n ** 2000 n),
-(2 n ** 1000 n),
// -(2n**64n)
-18446744073709551617 n,
-18446744073709551616 n,
-18446744073709551615 n,
// -(2n**63n)
-9223372036854775809 n,
-9223372036854775808 n,
-9223372036854775807 n,
// -(2**32)
-4294967297 n,
-4294967296 n,
-4294967295 n,
// -(2**31)
-2147483649 n,
-2147483648 n,
-2147483647 n,
-1 n,
0 n,
1 n,
// 2**31
2147483647 n,
2147483648 n,
2147483649 n,
// 2**32
4294967295 n,
4294967296 n,
4294967297 n,
// 2n**63n
9223372036854775807 n,
9223372036854775808 n,
9223372036854775809 n,
// 2n**64n
18446744073709551615 n,
18446744073709551616 n,
18446744073709551617 n,
// Definitely heap digits.
2 n ** 1000 n,
2 n ** 2000 n,
];
function testAdd() {
const int64 = new BigInt64Array(2 );
const uint64 = new BigUint64Array(2 );
// Test with constant index.
for (let i = 0 ; i < 20 ; ++i) {
for (let j = 0 ; j < bigIntValues.length; ++j) {
let value = bigIntValues[j];
assertEq(Atomics.add(int64, 0 , value), 0 n);
assertEq(int64[0 ], BigInt.asIntN(64 , value));
assertEq(Atomics.add(uint64, 0 , value), 0 n);
assertEq(uint64[0 ], BigInt.asUintN(64 , value));
assertEq(Atomics.add(int64, 0 , -value), BigInt.asIntN(64 , value));
assertEq(int64[0 ], 0 n);
assertEq(Atomics.add(uint64, 0 , -value), BigInt.asUintN(64 , value));
assertEq(uint64[0 ], 0 n);
}
}
// Test with variable index.
for (let i = 0 ; i < 20 ; ++i) {
for (let j = 0 ; j < bigIntValues.length; ++j) {
let value = bigIntValues[j];
let idx = j & 1 ;
assertEq(Atomics.add(int64, idx, value), 0 n);
assertEq(int64[idx], BigInt.asIntN(64 , value));
assertEq(Atomics.add(uint64, idx, value), 0 n);
assertEq(uint64[idx], BigInt.asUintN(64 , value));
assertEq(Atomics.add(int64, idx, -value), BigInt.asIntN(64 , value));
assertEq(int64[idx], 0 n);
assertEq(Atomics.add(uint64, idx, -value), BigInt.asUintN(64 , value));
assertEq(uint64[idx], 0 n);
}
}
}
for (let i = 0 ; i < 2 ; ++i) testAdd();
Messung V0.5 in Prozent C=95 H=93 G=93
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland