diff options
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.js | 165 |
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(); |