diff options
Diffstat (limited to '')
-rw-r--r-- | js/src/jit-test/tests/large-arraybuffers/atomics.js | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/large-arraybuffers/atomics.js b/js/src/jit-test/tests/large-arraybuffers/atomics.js new file mode 100644 index 0000000000..0e108db3b7 --- /dev/null +++ b/js/src/jit-test/tests/large-arraybuffers/atomics.js @@ -0,0 +1,57 @@ +// |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, 0xf), 124); + assertEq(Atomics.or(uint8, index, 0xf), 12); + assertEq(Atomics.xor(uint8, index, 0xee), 0xf); + 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(); |