// |jit-test| skip-if: !this.SharedArrayBuffer || !this.Atomics
let gb = 1 * 1024 * 1024 * 1024 ;
let buflen = 4 * gb + 64 ;
let sab = new SharedArrayBuffer(buflen);
assertEq(sab.byteLength, buflen);
function testBasic(base) {
var uint8 = new Uint8Array(sab);
var uint8Part = new Uint8Array(sab, base, 64 );
for (var i = 0 ; i < 50 ; i++) {
var index = base + i;
uint8Part[i] = 123 ;
assertEq(uint8[index], 123 );
// Binary ops.
assertEq(Atomics.add(uint8, index, 1 ), 123 );
assertEq(Atomics.and(uint8, index, 0 xf), 124 );
assertEq(Atomics.or(uint8, index, 0 xf), 12 );
assertEq(Atomics.xor(uint8, index, 0 xee), 0 xf);
assertEq(Atomics.sub(uint8, index, 100 ), 225 );
assertEq(uint8Part[i], 125 );
// compareExchange.
assertEq(Atomics.compareExchange(uint8, index, 125 , 90 ), 125 );
assertEq(Atomics.compareExchange(uint8, index, 125 , 90 ), 90 );
assertEq(uint8Part[i], 90 );
// exchange.
assertEq(Atomics.exchange(uint8, index, 42 ), 90 );
assertEq(uint8Part[i], 42 );
// load/store.
assertEq(Atomics.load(uint8, index), 42 );
assertEq(Atomics.store(uint8, index, 99 ), 99 );
assertEq(uint8Part[i], 99 );
}
}
for (let i = 0 ; i <= 4 ; i++) {
testBasic(i * gb);
}
function testWait() {
let int32 = new Int32Array(sab);
let index = int32.length - 1 ;
assertEq(int32[index], 0 );
assertEq(Atomics.wait(int32, index, 1 ), "not-equal" );
int32[index] = 12345 ;
assertEq(Atomics.wait(int32, index, 12345 , 1 ), "timed-out" );
assertEq(Atomics.notify(int32, index), 0 );
let int32WithOffset = new Int32Array(sab, int32.byteLength - 4 );
assertEq(int32WithOffset[0 ], 12345 );
assertEq(Atomics.wait(int32WithOffset, 0 , 12345 , 1 ), "timed-out" );
}
testWait();
Messung V0.5 in Prozent C=93 H=86 G=89
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-06)
¤
*© Formatika GbR, Deutschland