| Index: test/mjsunit/harmony/typedarrays-foreach.js
|
| diff --git a/test/mjsunit/harmony/typedarrays-foreach.js b/test/mjsunit/harmony/typedarrays-foreach.js
|
| deleted file mode 100644
|
| index e1d375da1a08c9e5730436492f89fdc761db791e..0000000000000000000000000000000000000000
|
| --- a/test/mjsunit/harmony/typedarrays-foreach.js
|
| +++ /dev/null
|
| @@ -1,155 +0,0 @@
|
| -// 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.
|
| -
|
| -// Flags: --harmony-arrays --allow-natives-syntax
|
| -
|
| -var typedArrayConstructors = [
|
| - Uint8Array,
|
| - Int8Array,
|
| - Uint16Array,
|
| - Int16Array,
|
| - Uint32Array,
|
| - Int32Array,
|
| - Uint8ClampedArray,
|
| - Float32Array,
|
| - Float64Array];
|
| -
|
| -function CheckTypedArrayIsNeutered(array) {
|
| - assertEquals(0, array.byteLength);
|
| - assertEquals(0, array.byteOffset);
|
| - assertEquals(0, array.length);
|
| -}
|
| -
|
| -function TestTypedArrayForEach(constructor) {
|
| - assertEquals(1, constructor.prototype.forEach.length);
|
| -
|
| - var a = new constructor(2);
|
| - a[0] = 0;
|
| - a[1] = 1;
|
| -
|
| - var count = 0;
|
| - a.forEach(function (n) { count++; });
|
| - assertEquals(2, count);
|
| -
|
| - // Use specified object as this object when calling the function.
|
| - var o = { value: 42 };
|
| - var result = [];
|
| - a.forEach(function (n, index, array) { result.push(this.value); }, o);
|
| - assertArrayEquals([42, 42], result);
|
| -
|
| - // Modify the original array.
|
| - count = 0;
|
| - a.forEach(function (n, index, array) { array[index] = n + 1; count++ });
|
| - assertEquals(2, count);
|
| - assertArrayEquals([1, 2], a);
|
| -
|
| - // Check that values passed as second argument are wrapped into
|
| - // objects when calling into sloppy mode functions.
|
| - function CheckWrapping(value, wrapper) {
|
| - var wrappedValue = new wrapper(value);
|
| -
|
| - a.forEach(function () {
|
| - assertEquals("object", typeof this);
|
| - assertEquals(wrappedValue, this);
|
| - }, value);
|
| -
|
| - a.forEach(function () {
|
| - "use strict";
|
| - assertEquals(typeof value, typeof this);
|
| - assertEquals(value, this);
|
| - }, value);
|
| - }
|
| - CheckWrapping(true, Boolean);
|
| - CheckWrapping(false, Boolean);
|
| - CheckWrapping("xxx", String);
|
| - CheckWrapping(42, Number);
|
| - CheckWrapping(3.14, Number);
|
| - CheckWrapping({}, Object);
|
| -
|
| - // Throw before completing iteration, only the first element
|
| - // should be modified when thorwing mid-way.
|
| - count = 0;
|
| - a[0] = 42;
|
| - a[1] = 42;
|
| - try {
|
| - a.forEach(function (n, index, array) {
|
| - if (count > 0) throw "meh";
|
| - array[index] = n + 1;
|
| - count++;
|
| - });
|
| - } catch (e) {
|
| - }
|
| - assertEquals(1, count);
|
| - assertEquals(43, a[0]);
|
| - assertEquals(42, a[1]);
|
| -
|
| - // Neutering the buffer backing the typed array mid-way should
|
| - // still make .forEach() finish, but exiting early due to the missing
|
| - // elements, and the array should keep being empty after detaching it.
|
| - // TODO(dehrenberg): According to the ES6 spec, accessing or testing
|
| - // for members on a detached TypedArray should throw, so really this
|
| - // should throw in the third iteration. However, this behavior matches
|
| - // the Khronos spec.
|
| - a = new constructor(3);
|
| - count = 0;
|
| - a.forEach(function (n, index, array) {
|
| - if (count > 0) %ArrayBufferNeuter(array.buffer);
|
| - array[index] = n + 1;
|
| - count++;
|
| - });
|
| - assertEquals(2, count);
|
| - CheckTypedArrayIsNeutered(a);
|
| - assertEquals(undefined, a[0]);
|
| -
|
| - // The method must work for typed arrays created from ArrayBuffer.
|
| - // The length of the ArrayBuffer is chosen so it is a multiple of
|
| - // all lengths of the typed array items.
|
| - a = new constructor(new ArrayBuffer(64));
|
| - count = 0;
|
| - a.forEach(function (n) { count++ });
|
| - assertEquals(a.length, count);
|
| -
|
| - // Externalizing the array mid-way accessing the .buffer property
|
| - // should work.
|
| - a = new constructor(2);
|
| - count = 0;
|
| - var buffer = undefined;
|
| - a.forEach(function (n, index, array) {
|
| - if (count++ > 0)
|
| - buffer = array.buffer;
|
| - });
|
| - assertEquals(2, count);
|
| - assertTrue(!!buffer);
|
| - assertEquals("ArrayBuffer", %_ClassOf(buffer));
|
| - assertSame(buffer, a.buffer);
|
| -
|
| - // The %TypedArray%.forEach() method should not work when
|
| - // transplanted to objects that are not typed arrays.
|
| - assertThrows(function () { constructor.prototype.forEach.call([1, 2, 3], function (x) {}) }, TypeError);
|
| - assertThrows(function () { constructor.prototype.forEach.call("abc", function (x) {}) }, TypeError);
|
| - assertThrows(function () { constructor.prototype.forEach.call({}, function (x) {}) }, TypeError);
|
| - assertThrows(function () { constructor.prototype.forEach.call(0, function (x) {}) }, TypeError);
|
| -
|
| - // Method must be useable on instances of other typed arrays.
|
| - for (var i = 0; i < typedArrayConstructors.length; i++) {
|
| - count = 0;
|
| - a = new typedArrayConstructors[i](4);
|
| - constructor.prototype.forEach.call(a, function (x) { count++ });
|
| - assertEquals(a.length, count);
|
| - }
|
| -
|
| - // Shadowing length doesn't affect forEach, unlike Array.prototype.forEach
|
| - a = new constructor([1, 2]);
|
| - Object.defineProperty(a, 'length', {value: 1});
|
| - var x = 0;
|
| - assertEquals(a.forEach(function(elt) { x += elt; }), undefined);
|
| - assertEquals(x, 3);
|
| - assertEquals(Array.prototype.forEach.call(a,
|
| - function(elt) { x += elt; }), undefined);
|
| - assertEquals(x, 4);
|
| -}
|
| -
|
| -for (i = 0; i < typedArrayConstructors.length; i++) {
|
| - TestTypedArrayForEach(typedArrayConstructors[i]);
|
| -}
|
|
|