summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/typedarray/construct-with-arrays.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/typedarray/construct-with-arrays.js')
-rw-r--r--js/src/jit-test/tests/typedarray/construct-with-arrays.js165
1 files changed, 165 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/typedarray/construct-with-arrays.js b/js/src/jit-test/tests/typedarray/construct-with-arrays.js
new file mode 100644
index 0000000000..290a27b3ea
--- /dev/null
+++ b/js/src/jit-test/tests/typedarray/construct-with-arrays.js
@@ -0,0 +1,165 @@
+// Test TypedArray constructor when called with iterables or typed arrays.
+
+function testPackedArray() {
+ function test() {
+ var array = [
+ 1, 2, 3,
+ 4, 5, 6,
+ 7, 8, 9,
+ ];
+ for (var i = 0; i < 1000; ++i) {
+ var ta = new Int32Array(array);
+ assertEq(ta.length, array.length);
+ for (var j = 0; j < array.length; ++j) {
+ assertEq(ta[j], array[j]);
+ }
+ }
+ }
+ for (var i = 0; i < 2; ++i) {
+ test();
+ }
+}
+testPackedArray();
+
+function testHoleArray() {
+ function test() {
+ var array = [
+ 1, /* hole */, 3,
+ 4, /* hole */, 6,
+ 7, /* hole */, 9,
+ ];
+ for (var i = 0; i < 1000; ++i) {
+ var ta = new Int32Array(array);
+ assertEq(ta.length, array.length);
+ for (var j = 0; j < array.length; ++j) {
+ assertEq(ta[j], array[j] || 0);
+ }
+ }
+ }
+ for (var i = 0; i < 2; ++i) {
+ test();
+ }
+}
+testHoleArray();
+
+function testTypedArraySameType() {
+ function test() {
+ var array = new Int32Array([
+ 1, 2, 3,
+ 4, 5, 6,
+ 7, 8, 9,
+ ]);
+ for (var i = 0; i < 1000; ++i) {
+ var ta = new Int32Array(array);
+ assertEq(ta.length, array.length);
+ for (var j = 0; j < array.length; ++j) {
+ assertEq(ta[j], array[j]);
+ }
+ }
+ }
+ for (var i = 0; i < 2; ++i) {
+ test();
+ }
+}
+testTypedArraySameType();
+
+function testTypedArrayDifferentType() {
+ function test() {
+ var array = new Float32Array([
+ 1, 2, 3,
+ 4, 5, 6,
+ 7, 8, 9,
+ ]);
+ for (var i = 0; i < 1000; ++i) {
+ var ta = new Int32Array(array);
+ assertEq(ta.length, array.length);
+ for (var j = 0; j < array.length; ++j) {
+ assertEq(ta[j], array[j]);
+ }
+ }
+ }
+ for (var i = 0; i < 2; ++i) {
+ test();
+ }
+}
+testTypedArrayDifferentType();
+
+function testIterable() {
+ function test() {
+ var array = [
+ 1, 2, 3,
+ 4, 5, 6,
+ 7, 8, 9,
+ ];
+ array = Object.defineProperties({
+ [Symbol.iterator]() {
+ var index = 0;
+ return {
+ next() {
+ var done = index >= array.length;
+ var value = !done ? array[index++] : undefined;
+ return {done, value};
+ }
+ };
+ }
+ }, Object.getOwnPropertyDescriptors(array));
+
+ for (var i = 0; i < 1000; ++i) {
+ var ta = new Int32Array(array);
+ assertEq(ta.length, array.length);
+ for (var j = 0; j < array.length; ++j) {
+ assertEq(ta[j], array[j]);
+ }
+ }
+ }
+ for (var i = 0; i < 2; ++i) {
+ test();
+ }
+}
+testIterable();
+
+function testWrappedArray() {
+ var g = newGlobal();
+
+ function test() {
+ var array = new g.Array(
+ 1, 2, 3,
+ 4, 5, 6,
+ 7, 8, 9,
+ );
+ for (var i = 0; i < 1000; ++i) {
+ var ta = new Int32Array(array);
+ assertEq(ta.length, array.length);
+ for (var j = 0; j < array.length; ++j) {
+ assertEq(ta[j], array[j]);
+ }
+ }
+ }
+ for (var i = 0; i < 2; ++i) {
+ test();
+ }
+}
+testWrappedArray();
+
+function testWrappedTypedArray() {
+ var g = newGlobal();
+
+ function test() {
+ var array = new g.Int32Array([
+ 1, 2, 3,
+ 4, 5, 6,
+ 7, 8, 9,
+ ]);
+ for (var i = 0; i < 1000; ++i) {
+ var ta = new Int32Array(array);
+ assertEq(ta.length, array.length);
+ for (var j = 0; j < array.length; ++j) {
+ assertEq(ta[j], array[j]);
+ }
+ }
+ }
+ for (var i = 0; i < 2; ++i) {
+ test();
+ }
+}
+testWrappedTypedArray();