summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/sharedbuf/subtypes.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/sharedbuf/subtypes.js')
-rw-r--r--js/src/jit-test/tests/sharedbuf/subtypes.js52
1 files changed, 52 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/sharedbuf/subtypes.js b/js/src/jit-test/tests/sharedbuf/subtypes.js
new file mode 100644
index 0000000000..cf3adde3ce
--- /dev/null
+++ b/js/src/jit-test/tests/sharedbuf/subtypes.js
@@ -0,0 +1,52 @@
+// |jit-test| skip-if: !this.SharedArrayBuffer
+
+// Test cases for subclasses of SharedArrayBuffer.
+
+load(libdir + "asserts.js");
+
+// Basic subclassing.
+
+class MySharedArrayBuffer1 extends SharedArrayBuffer {
+ constructor(n) { super(n) }
+}
+
+let mv1 = new MySharedArrayBuffer1(1024);
+assertEq(mv1 instanceof SharedArrayBuffer, true);
+assertEq(mv1 instanceof MySharedArrayBuffer1, true);
+assertEq(mv1.byteLength, 1024);
+
+// Can construct views on the subclasses and read/write elements.
+
+let mva1 = new Int8Array(mv1);
+assertEq(mva1.length, mv1.byteLength);
+assertEq(mva1.buffer, mv1);
+
+for ( let i=1 ; i < mva1.length ; i++ )
+ mva1[i] = i;
+
+for ( let i=1 ; i < mva1.length ; i++ )
+ assertEq(mva1[i], (i << 24) >> 24);
+
+// Passing modified arguments to superclass to get a different length.
+
+class MySharedArrayBuffer2 extends SharedArrayBuffer {
+ constructor(n) { super(n-1) }
+}
+
+let mv2 = new MySharedArrayBuffer2(10);
+assertEq(mv2 instanceof SharedArrayBuffer, true);
+assertEq(mv2 instanceof MySharedArrayBuffer2, true);
+assertEq(mv2.byteLength, 9);
+
+// Returning a different object altogether.
+
+class MySharedArrayBuffer3 extends SharedArrayBuffer {
+ constructor(n) {
+ return new Array(n);
+ }
+}
+
+let mv3 = new MySharedArrayBuffer3(10);
+assertEq(mv3 instanceof Array, true);
+assertEq(mv3 instanceof MySharedArrayBuffer3, false);
+assertEq(mv3.length, 10);