Source code

Revision control

Copy as Markdown

Other Tools

// |reftest| skip-if(!this.Atomics||!this.SharedArrayBuffer) fails-if(!xulRuntime.shell)
const otherGlobal = newGlobal();
const intArrayConstructors = [
otherGlobal.Int32Array,
otherGlobal.Int16Array,
otherGlobal.Int8Array,
otherGlobal.Uint32Array,
otherGlobal.Uint16Array,
otherGlobal.Uint8Array,
];
// Atomics.load
for (let TA of intArrayConstructors) {
let ta = new TA(new otherGlobal.SharedArrayBuffer(4));
ta[0] = 1;
assertEq(Atomics.load(ta, 0), 1);
}
// Atomics.store
for (let TA of intArrayConstructors) {
let ta = new TA(new otherGlobal.SharedArrayBuffer(4));
Atomics.store(ta, 0, 1);
assertEq(ta[0], 1);
}
// Atomics.compareExchange
for (let TA of intArrayConstructors) {
let ta = new TA(new otherGlobal.SharedArrayBuffer(4));
ta[0] = 1;
let val = Atomics.compareExchange(ta, 0, 1, 2);
assertEq(val, 1);
assertEq(ta[0], 2);
}
// Atomics.exchange
for (let TA of intArrayConstructors) {
let ta = new TA(new otherGlobal.SharedArrayBuffer(4));
ta[0] = 1;
let val = Atomics.exchange(ta, 0, 2);
assertEq(val, 1);
assertEq(ta[0], 2);
}
// Atomics.add
for (let TA of intArrayConstructors) {
let ta = new TA(new otherGlobal.SharedArrayBuffer(4));
ta[0] = 1;
let val = Atomics.add(ta, 0, 2);
assertEq(val, 1);
assertEq(ta[0], 3);
}
// Atomics.sub
for (let TA of intArrayConstructors) {
let ta = new TA(new otherGlobal.SharedArrayBuffer(4));
ta[0] = 3;
let val = Atomics.sub(ta, 0, 2);
assertEq(val, 3);
assertEq(ta[0], 1);
}
// Atomics.and
for (let TA of intArrayConstructors) {
let ta = new TA(new otherGlobal.SharedArrayBuffer(4));
ta[0] = 3;
let val = Atomics.and(ta, 0, 1);
assertEq(val, 3);
assertEq(ta[0], 1);
}
// Atomics.or
for (let TA of intArrayConstructors) {
let ta = new TA(new otherGlobal.SharedArrayBuffer(4));
ta[0] = 2;
let val = Atomics.or(ta, 0, 1);
assertEq(val, 2);
assertEq(ta[0], 3);
}
// Atomics.xor
for (let TA of intArrayConstructors) {
let ta = new TA(new otherGlobal.SharedArrayBuffer(4));
ta[0] = 3;
let val = Atomics.xor(ta, 0, 1);
assertEq(val, 3);
assertEq(ta[0], 2);
}
if (typeof reportCompare === "function")
reportCompare(true, true);