| // Copyright 2014 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| function testConcatTypedArray(type, elems, modulo) { |
| "use strict"; |
| var items = new Array(elems); |
| var ta_by_len = new type(elems); |
| for (var i = 0; i < elems; ++i) { |
| ta_by_len[i] = items[i] = modulo === false ? i : elems % modulo; |
| } |
| var ta = new type(items); |
| assertEquals([ta, ta], [].concat(ta, ta)); |
| ta[Symbol.isConcatSpreadable] = true; |
| assertEquals(items, [].concat(ta)); |
| |
| assertEquals([ta_by_len, ta_by_len], [].concat(ta_by_len, ta_by_len)); |
| ta_by_len[Symbol.isConcatSpreadable] = true; |
| assertEquals(items, [].concat(ta_by_len)); |
| |
| // TypedArray with fake `length`. |
| ta = new type(1); |
| var defValue = ta[0]; |
| var expected = new Array(4000); |
| expected[0] = defValue; |
| |
| Object.defineProperty(ta, "length", { value: 4000 }); |
| ta[Symbol.isConcatSpreadable] = true; |
| assertEquals(expected, [].concat(ta)); |
| } |
| |
| (function testConcatSmallTypedArray() { |
| var length = 1; |
| testConcatTypedArray(Uint8Array, length, Math.pow(2, 8)); |
| testConcatTypedArray(Uint16Array, length, Math.pow(2, 16)); |
| testConcatTypedArray(Uint32Array, length, Math.pow(2, 32)); |
| testConcatTypedArray(Float32Array, length, false); |
| testConcatTypedArray(Float64Array, length, false); |
| })(); |
| |
| |
| (function testConcatLargeTypedArray() { |
| var length = 4000; |
| testConcatTypedArray(Uint8Array, length, Math.pow(2, 8)); |
| testConcatTypedArray(Uint16Array, length, Math.pow(2, 16)); |
| testConcatTypedArray(Uint32Array, length, Math.pow(2, 32)); |
| testConcatTypedArray(Float32Array, length, false); |
| testConcatTypedArray(Float64Array, length, false); |
| })(); |