summaryrefslogtreecommitdiff
path: root/test/built-ins/TypedArray/prototype/forEach
diff options
context:
space:
mode:
Diffstat (limited to 'test/built-ins/TypedArray/prototype/forEach')
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/arraylength-internal.js47
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-arguments-with-thisarg.js55
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-arguments-without-thisarg.js53
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-detachbuffer.js43
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-is-not-callable.js54
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-no-interaction-over-non-integer.js41
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-not-called-on-empty.js36
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-return-does-not-change-instance.js30
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-returns-abrupt.js36
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-set-value-during-interaction.js47
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-this.js57
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/detached-buffer.js32
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/invoked-as-func.js29
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/invoked-as-method.js29
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/length.js30
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/name.js27
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/prop-desc.js19
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/returns-undefined.js33
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/this-is-not-object.js51
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/this-is-not-typedarray-instance.js43
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/BigInt/values-are-not-cached.js31
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/callbackfn-detachbuffer.js1
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/invoked-as-func.js2
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/invoked-as-method.js2
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/length.js3
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/name.js3
-rw-r--r--test/built-ins/TypedArray/prototype/forEach/prop-desc.js3
27 files changed, 832 insertions, 5 deletions
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/arraylength-internal.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/arraylength-internal.js
new file mode 100644
index 000000000..c5d14f29e
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/arraylength-internal.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ [[ArrayLength]] is accessed in place of performing a [[Get]] of "length"
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ %TypedArray%.prototype.forEach is a distinct function that implements the same
+ algorithm as Array.prototype.forEach as defined in 22.1.3.10 except that the
+ this object's [[ArrayLength]] internal slot is accessed in place of performing
+ a [[Get]] of "length"
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample1 = new TA(42);
+ var loop = 0;
+
+ Object.defineProperty(sample1, "length", {value: 1});
+
+ sample1.forEach(function() {
+ loop++;
+ });
+
+ assert.sameValue(loop, 42, "data descriptor");
+
+ var sample2 = new TA(7);
+ loop = 0;
+
+ Object.defineProperty(sample2, "length", {
+ get: function() {
+ throw new Test262Error(
+ "Does not return abrupt getting length property"
+ );
+ }
+ });
+
+ sample2.forEach(function() {
+ loop++;
+ });
+
+ assert.sameValue(loop, 7, "accessor descriptor");
+});
+
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-arguments-with-thisarg.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-arguments-with-thisarg.js
new file mode 100644
index 000000000..07478cadf
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-arguments-with-thisarg.js
@@ -0,0 +1,55 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ thisArg does not affect callbackfn arguments
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ %TypedArray%.prototype.forEach is a distinct function that implements the same
+ algorithm as Array.prototype.forEach as defined in 22.1.3.10 except that the
+ this object's [[ArrayLength]] internal slot is accessed in place of performing
+ a [[Get]] of "length"
+
+ 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ ...
+ 6. Repeat, while k < len
+ ...
+ c. If kPresent is true, then
+ i. Let kValue be ? Get(O, Pk).
+ ii. Perform ? Call(callbackfn, T, « kValue, k, O »).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample = new TA([42n, 43n, 44n]);
+
+ var results = [];
+ var thisArg = ["test262", 0, "ecma262", 0];
+
+ sample.forEach(function() {
+ results.push(arguments);
+ }, thisArg);
+
+ assert.sameValue(results.length, 3, "results.length");
+ assert.sameValue(thisArg.length, 4, "thisArg.length");
+
+ assert.sameValue(results[0].length, 3, "results[0].length");
+ assert.sameValue(results[0][0], 42n, "results[0][0] - kValue");
+ assert.sameValue(results[0][1], 0, "results[0][1] - k");
+ assert.sameValue(results[0][2], sample, "results[0][2] - this");
+
+ assert.sameValue(results[1].length, 3, "results[1].length");
+ assert.sameValue(results[1][0], 43n, "results[1][0] - kValue");
+ assert.sameValue(results[1][1], 1, "results[1][1] - k");
+ assert.sameValue(results[1][2], sample, "results[1][2] - this");
+
+ assert.sameValue(results[2].length, 3, "results[2].length");
+ assert.sameValue(results[2][0], 44n, "results[2][0] - kValue");
+ assert.sameValue(results[2][1], 2, "results[2][1] - k");
+ assert.sameValue(results[2][2], sample, "results[2][2] - this");
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-arguments-without-thisarg.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-arguments-without-thisarg.js
new file mode 100644
index 000000000..6b6bdec5c
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-arguments-without-thisarg.js
@@ -0,0 +1,53 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ callbackfn arguments
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ %TypedArray%.prototype.forEach is a distinct function that implements the same
+ algorithm as Array.prototype.forEach as defined in 22.1.3.10 except that the
+ this object's [[ArrayLength]] internal slot is accessed in place of performing
+ a [[Get]] of "length"
+
+ 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ ...
+ 6. Repeat, while k < len
+ ...
+ c. If kPresent is true, then
+ i. Let kValue be ? Get(O, Pk).
+ ii. Perform ? Call(callbackfn, T, « kValue, k, O »).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample = new TA([42n, 43n, 44n]);
+
+ var results = [];
+
+ sample.forEach(function() {
+ results.push(arguments);
+ });
+
+ assert.sameValue(results.length, 3, "results.length");
+
+ assert.sameValue(results[0].length, 3, "results[0].length");
+ assert.sameValue(results[0][0], 42n, "results[0][0] - kValue");
+ assert.sameValue(results[0][1], 0, "results[0][1] - k");
+ assert.sameValue(results[0][2], sample, "results[0][2] - this");
+
+ assert.sameValue(results[1].length, 3, "results[1].length");
+ assert.sameValue(results[1][0], 43n, "results[1][0] - kValue");
+ assert.sameValue(results[1][1], 1, "results[1][1] - k");
+ assert.sameValue(results[1][2], sample, "results[1][2] - this");
+
+ assert.sameValue(results[2].length, 3, "results[2].length");
+ assert.sameValue(results[2][0], 44n, "results[2][0] - kValue");
+ assert.sameValue(results[2][1], 2, "results[2][1] - k");
+ assert.sameValue(results[2][2], sample, "results[2][2] - this");
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-detachbuffer.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-detachbuffer.js
new file mode 100644
index 000000000..bf04fe979
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-detachbuffer.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ Instance buffer can be detached during loop
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ %TypedArray%.prototype.forEach is a distinct function that implements the same
+ algorithm as Array.prototype.forEach as defined in 22.1.3.10 except that the
+ this object's [[ArrayLength]] internal slot is accessed in place of performing
+ a [[Get]] of "length"
+
+ 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ ...
+ 6. Repeat, while k < len
+ ...
+ c. If kPresent is true, then
+ ...
+ ii. Perform ? Call(callbackfn, T, « kValue, k, O »).
+ ...
+includes: [detachArrayBuffer.js, testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var loops = 0;
+ var sample = new TA(2);
+
+ assert.throws(TypeError, function() {
+ sample.forEach(function() {
+ if (loops === 1) {
+ throw new Test262Error("callbackfn called twice");
+ }
+ $DETACHBUFFER(sample.buffer);
+ loops++;
+ });
+ });
+
+ assert.sameValue(loops, 1);
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-is-not-callable.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-is-not-callable.js
new file mode 100644
index 000000000..219872510
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-is-not-callable.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ callbackfn is not callable
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ %TypedArray%.prototype.forEach is a distinct function that implements the same
+ algorithm as Array.prototype.forEach as defined in 22.1.3.10 except that the
+ this object's [[ArrayLength]] internal slot is accessed in place of performing
+ a [[Get]] of "length"
+
+ 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ ...
+ 3. If IsCallable(callbackfn) is false, throw a TypeError exception.
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample = new TA(3);
+
+ assert.throws(TypeError, function() {
+ sample.forEach();
+ });
+
+ assert.throws(TypeError, function() {
+ sample.forEach(undefined);
+ });
+
+ assert.throws(TypeError, function() {
+ sample.forEach(null);
+ });
+
+ assert.throws(TypeError, function() {
+ sample.forEach({});
+ });
+
+ assert.throws(TypeError, function() {
+ sample.forEach(1);
+ });
+
+ assert.throws(TypeError, function() {
+ sample.forEach("");
+ });
+
+ assert.throws(TypeError, function() {
+ sample.forEach(false);
+ });
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-no-interaction-over-non-integer.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-no-interaction-over-non-integer.js
new file mode 100644
index 000000000..9edd63e09
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-no-interaction-over-non-integer.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ Does not interact over non-integer properties
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ ...
+ 6. Repeat, while k < len
+ ...
+ c. If kPresent is true, then
+ ...
+ ii. Perform ? Call(callbackfn, T, « kValue, k, O »).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, Symbol, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample = new TA([7n, 8n]);
+
+ var results = [];
+
+ sample.foo = 42;
+ sample[Symbol("1")] = 43;
+
+ sample.forEach(function() {
+ results.push(arguments);
+ });
+
+ assert.sameValue(results.length, 2, "results.length");
+
+ assert.sameValue(results[0][1], 0, "results[0][1] - k");
+ assert.sameValue(results[1][1], 1, "results[1][1] - k");
+
+ assert.sameValue(results[0][0], 7n, "results[0][0] - kValue");
+ assert.sameValue(results[1][0], 8n, "results[1][0] - kValue");
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-not-called-on-empty.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-not-called-on-empty.js
new file mode 100644
index 000000000..f81f5ac40
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-not-called-on-empty.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ callbackfn is not called on empty instances
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ %TypedArray%.prototype.forEach is a distinct function that implements the same
+ algorithm as Array.prototype.forEach as defined in 22.1.3.10 except that the
+ this object's [[ArrayLength]] internal slot is accessed in place of performing
+ a [[Get]] of "length"
+
+ 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ ...
+ 6. Repeat, while k < len
+ ...
+ c. If kPresent is true, then
+ ...
+ ii. Perform ? Call(callbackfn, T, « kValue, k, O »).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var called = 0;
+
+ new TA().forEach(function() {
+ called++;
+ });
+
+ assert.sameValue(called, 0);
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-return-does-not-change-instance.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-return-does-not-change-instance.js
new file mode 100644
index 000000000..341a7decd
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-return-does-not-change-instance.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ The callbackfn return does not change the instance
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ %TypedArray%.prototype.forEach is a distinct function that implements the same
+ algorithm as Array.prototype.forEach as defined in 22.1.3.10 except that the
+ this object's [[ArrayLength]] internal slot is accessed in place of performing
+ a [[Get]] of "length"
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample1 = new TA(3);
+
+ sample1[1] = 1n;
+
+ sample1.forEach(function() {
+ return 42;
+ });
+
+ assert.sameValue(sample1[0], 0n, "[0] == 0");
+ assert.sameValue(sample1[1], 1n, "[1] == 1");
+ assert.sameValue(sample1[2], 0n, "[2] == 0");
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-returns-abrupt.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-returns-abrupt.js
new file mode 100644
index 000000000..fb9c58a20
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-returns-abrupt.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ Returns abrupt from callbackfn
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ %TypedArray%.prototype.forEach is a distinct function that implements the same
+ algorithm as Array.prototype.forEach as defined in 22.1.3.10 except that the
+ this object's [[ArrayLength]] internal slot is accessed in place of performing
+ a [[Get]] of "length"
+
+ 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ ...
+ 6. Repeat, while k < len
+ ...
+ c. If kPresent is true, then
+ ...
+ ii. Perform ? Call(callbackfn, T, « kValue, k, O »).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample = new TA(3);
+
+ assert.throws(Test262Error, function() {
+ sample.forEach(function() {
+ throw new Test262Error();
+ });
+ });
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-set-value-during-interaction.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-set-value-during-interaction.js
new file mode 100644
index 000000000..13bd7fb01
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-set-value-during-interaction.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ Integer indexed values changed during iteration
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ %TypedArray%.prototype.forEach is a distinct function that implements the same
+ algorithm as Array.prototype.forEach as defined in 22.1.3.10 except that the
+ this object's [[ArrayLength]] internal slot is accessed in place of performing
+ a [[Get]] of "length"
+includes: [testBigIntTypedArray.js]
+features: [BigInt, Reflect.set, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample = new TA([42n, 43n, 44n]);
+ var newVal = 0n;
+
+ sample.forEach(function(val, i) {
+ if (i > 0) {
+ assert.sameValue(
+ sample[i - 1], newVal - 1n,
+ "get the changed value during the loop"
+ );
+ assert.sameValue(
+ Reflect.set(sample, 0, 7n),
+ true,
+ "re-set a value for sample[0]"
+ );
+ }
+ assert.sameValue(
+ Reflect.set(sample, i, newVal),
+ true,
+ "set value during iteration"
+ );
+
+ newVal++;
+ });
+
+ assert.sameValue(sample[0], 7n, "changed values after iteration [0] == 7");
+ assert.sameValue(sample[1], 1n, "changed values after iteration [1] == 1");
+ assert.sameValue(sample[2], 2n, "changed values after iteration [2] == 2");
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-this.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-this.js
new file mode 100644
index 000000000..df900d125
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/callbackfn-this.js
@@ -0,0 +1,57 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ callbackfn `this` value
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ %TypedArray%.prototype.forEach is a distinct function that implements the same
+ algorithm as Array.prototype.forEach as defined in 22.1.3.10 except that the
+ this object's [[ArrayLength]] internal slot is accessed in place of performing
+ a [[Get]] of "length"
+
+ 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ ...
+ 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
+ ...
+ 6. Repeat, while k < len
+ ...
+ c. If kPresent is true, then
+ ...
+ ii. Perform ? Call(callbackfn, T, « kValue, k, O »).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+var expected = (function() { return this; })();
+var thisArg = {};
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample = new TA(3);
+
+ var results1 = [];
+
+ sample.forEach(function() {
+ results1.push(this);
+ });
+
+ assert.sameValue(results1.length, 3, "results1");
+ assert.sameValue(results1[0], expected, "without thisArg - [0]");
+ assert.sameValue(results1[1], expected, "without thisArg - [1]");
+ assert.sameValue(results1[2], expected, "without thisArg - [2]");
+
+ var results2 = [];
+
+ sample.forEach(function() {
+ results2.push(this);
+ }, thisArg);
+
+ assert.sameValue(results2.length, 3, "results2");
+ assert.sameValue(results2[0], thisArg, "using thisArg - [0]");
+ assert.sameValue(results2[1], thisArg, "using thisArg - [1]");
+ assert.sameValue(results2[2], thisArg, "using thisArg - [2]");
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/detached-buffer.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/detached-buffer.js
new file mode 100644
index 000000000..fe196e0cb
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/detached-buffer.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: Throws a TypeError if this has a detached buffer
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ This function is not generic. ValidateTypedArray is applied to the this value
+ prior to evaluating the algorithm. If its result is an abrupt completion that
+ exception is thrown instead of evaluating the algorithm.
+
+ 22.2.3.5.1 Runtime Semantics: ValidateTypedArray ( O )
+
+ ...
+ 5. If IsDetachedBuffer(buffer) is true, throw a TypeError exception.
+ ...
+includes: [testBigIntTypedArray.js, detachArrayBuffer.js]
+features: [BigInt, TypedArray]
+---*/
+
+var callbackfn = function() {
+ throw new Test262Error();
+};
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample = new TA(1);
+ $DETACHBUFFER(sample.buffer);
+ assert.throws(TypeError, function() {
+ sample.forEach(callbackfn);
+ });
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/invoked-as-func.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/invoked-as-func.js
new file mode 100644
index 000000000..d4eb50b88
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/invoked-as-func.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: Throws a TypeError exception when invoked as a function
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ This function is not generic. ValidateTypedArray is applied to the this value
+ prior to evaluating the algorithm. If its result is an abrupt completion that
+ exception is thrown instead of evaluating the algorithm.
+
+ 22.2.3.5.1 Runtime Semantics: ValidateTypedArray ( O )
+
+ 1. If Type(O) is not Object, throw a TypeError exception.
+ 2. If O does not have a [[TypedArrayName]] internal slot, throw a TypeError
+ exception.
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+var forEach = TypedArray.prototype.forEach;
+
+assert.sameValue(typeof forEach, 'function');
+
+assert.throws(TypeError, function() {
+ forEach();
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/invoked-as-method.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/invoked-as-method.js
new file mode 100644
index 000000000..f45505275
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/invoked-as-method.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: Requires a [[TypedArrayName]] internal slot.
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ This function is not generic. ValidateTypedArray is applied to the this value
+ prior to evaluating the algorithm. If its result is an abrupt completion that
+ exception is thrown instead of evaluating the algorithm.
+
+ 22.2.3.5.1 Runtime Semantics: ValidateTypedArray ( O )
+
+ 1. If Type(O) is not Object, throw a TypeError exception.
+ 2. If O does not have a [[TypedArrayName]] internal slot, throw a TypeError
+ exception.
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+var TypedArrayPrototype = TypedArray.prototype;
+
+assert.sameValue(typeof TypedArrayPrototype.forEach, 'function');
+
+assert.throws(TypeError, function() {
+ TypedArrayPrototype.forEach();
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/length.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/length.js
new file mode 100644
index 000000000..f8f9624a9
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/length.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ %TypedArray%.prototype.forEach.length is 1.
+info: |
+ %TypedArray%.prototype.forEach (callbackfn [ , thisArg ] )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description, including optional
+ parameters. However, rest parameters shown using the form “...name”
+ are not included in the default argument count.
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js, testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+assert.sameValue(TypedArray.prototype.forEach.length, 1);
+
+verifyNotEnumerable(TypedArray.prototype.forEach, "length");
+verifyNotWritable(TypedArray.prototype.forEach, "length");
+verifyConfigurable(TypedArray.prototype.forEach, "length");
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/name.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/name.js
new file mode 100644
index 000000000..36c9ffde4
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/name.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ %TypedArray%.prototype.forEach.name is "forEach".
+info: |
+ %TypedArray%.prototype.forEach (callbackfn [ , thisArg ] )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js, testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+assert.sameValue(TypedArray.prototype.forEach.name, "forEach");
+
+verifyNotEnumerable(TypedArray.prototype.forEach, "name");
+verifyNotWritable(TypedArray.prototype.forEach, "name");
+verifyConfigurable(TypedArray.prototype.forEach, "name");
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/prop-desc.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/prop-desc.js
new file mode 100644
index 000000000..b095a89f2
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/prop-desc.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ "forEach" property of TypedArrayPrototype
+info: |
+ ES6 section 17: Every other data property described in clauses 18 through 26
+ and in Annex B.2 has the attributes { [[Writable]]: true,
+ [[Enumerable]]: false, [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js, testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+var TypedArrayPrototype = TypedArray.prototype;
+
+verifyNotEnumerable(TypedArrayPrototype, 'forEach');
+verifyWritable(TypedArrayPrototype, 'forEach');
+verifyConfigurable(TypedArrayPrototype, 'forEach');
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/returns-undefined.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/returns-undefined.js
new file mode 100644
index 000000000..467825d27
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/returns-undefined.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ Returns undefined
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ %TypedArray%.prototype.forEach is a distinct function that implements the same
+ algorithm as Array.prototype.forEach as defined in 22.1.3.10 except that the
+ this object's [[ArrayLength]] internal slot is accessed in place of performing
+ a [[Get]] of "length"
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample1 = new TA(42);
+
+ var result1 = sample1.forEach(function() {
+ return 42;
+ });
+
+ assert.sameValue(result1, undefined, "result1");
+
+ var sample2 = new TA(1);
+ var result2 = sample2.forEach(function() {
+ return null;
+ });
+
+ assert.sameValue(result2, undefined, "result2");
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/this-is-not-object.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/this-is-not-object.js
new file mode 100644
index 000000000..6317c05d5
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/this-is-not-object.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: Throws a TypeError exception when `this` is not Object
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ This function is not generic. ValidateTypedArray is applied to the this value
+ prior to evaluating the algorithm. If its result is an abrupt completion that
+ exception is thrown instead of evaluating the algorithm.
+
+ 22.2.3.5.1 Runtime Semantics: ValidateTypedArray ( O )
+
+ 1. If Type(O) is not Object, throw a TypeError exception.
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, Symbol, TypedArray]
+---*/
+
+var forEach = TypedArray.prototype.forEach;
+var callbackfn = function() {};
+
+assert.throws(TypeError, function() {
+ forEach.call(undefined, callbackfn);
+}, "this is undefined");
+
+assert.throws(TypeError, function() {
+ forEach.call(null, callbackfn);
+}, "this is null");
+
+assert.throws(TypeError, function() {
+ forEach.call(42, callbackfn);
+}, "this is 42");
+
+assert.throws(TypeError, function() {
+ forEach.call("1", callbackfn);
+}, "this is a string");
+
+assert.throws(TypeError, function() {
+ forEach.call(true, callbackfn);
+}, "this is true");
+
+assert.throws(TypeError, function() {
+ forEach.call(false, callbackfn);
+}, "this is false");
+
+var s = Symbol("s");
+assert.throws(TypeError, function() {
+ forEach.call(s, callbackfn);
+}, "this is a Symbol");
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/this-is-not-typedarray-instance.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/this-is-not-typedarray-instance.js
new file mode 100644
index 000000000..33db208c9
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/this-is-not-typedarray-instance.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ Throws a TypeError exception when `this` is not a TypedArray instance
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ This function is not generic. ValidateTypedArray is applied to the this value
+ prior to evaluating the algorithm. If its result is an abrupt completion that
+ exception is thrown instead of evaluating the algorithm.
+
+ 22.2.3.5.1 Runtime Semantics: ValidateTypedArray ( O )
+
+ 1. If Type(O) is not Object, throw a TypeError exception.
+ 2. If O does not have a [[TypedArrayName]] internal slot, throw a TypeError
+ exception.
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+var forEach = TypedArray.prototype.forEach;
+var callbackfn = function() {};
+
+assert.throws(TypeError, function() {
+ forEach.call({}, callbackfn);
+}, "this is an Object");
+
+assert.throws(TypeError, function() {
+ forEach.call([], callbackfn);
+}, "this is an Array");
+
+var ab = new ArrayBuffer(8);
+assert.throws(TypeError, function() {
+ forEach.call(ab, callbackfn);
+}, "this is an ArrayBuffer instance");
+
+var dv = new DataView(new ArrayBuffer(8), 0, 1);
+assert.throws(TypeError, function() {
+ forEach.call(dv, callbackfn);
+}, "this is a DataView instance");
diff --git a/test/built-ins/TypedArray/prototype/forEach/BigInt/values-are-not-cached.js b/test/built-ins/TypedArray/prototype/forEach/BigInt/values-are-not-cached.js
new file mode 100644
index 000000000..1fcc724f8
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/forEach/BigInt/values-are-not-cached.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%typedarray%.prototype.foreach
+description: >
+ Integer indexed values are not cached before iteration
+info: |
+ 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
+
+ %TypedArray%.prototype.forEach is a distinct function that implements the same
+ algorithm as Array.prototype.forEach as defined in 22.1.3.10 except that the
+ this object's [[ArrayLength]] internal slot is accessed in place of performing
+ a [[Get]] of "length"
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample = new TA([42n, 43n, 44n]);
+
+ sample.forEach(function(v, i) {
+ if (i < sample.length - 1) {
+ sample[i+1] = 42n;
+ }
+
+ assert.sameValue(
+ v, 42n, "method does not cache values before callbackfn calls"
+ );
+ });
+});
diff --git a/test/built-ins/TypedArray/prototype/forEach/callbackfn-detachbuffer.js b/test/built-ins/TypedArray/prototype/forEach/callbackfn-detachbuffer.js
index 44971dbae..6540255f7 100644
--- a/test/built-ins/TypedArray/prototype/forEach/callbackfn-detachbuffer.js
+++ b/test/built-ins/TypedArray/prototype/forEach/callbackfn-detachbuffer.js
@@ -22,6 +22,7 @@ info: |
ii. Perform ? Call(callbackfn, T, « kValue, k, O »).
...
includes: [detachArrayBuffer.js, testTypedArray.js]
+features: [TypedArray]
---*/
testWithTypedArrayConstructors(function(TA) {
diff --git a/test/built-ins/TypedArray/prototype/forEach/invoked-as-func.js b/test/built-ins/TypedArray/prototype/forEach/invoked-as-func.js
index 5312bbde0..a99a5bef7 100644
--- a/test/built-ins/TypedArray/prototype/forEach/invoked-as-func.js
+++ b/test/built-ins/TypedArray/prototype/forEach/invoked-as-func.js
@@ -1,7 +1,7 @@
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
-es6id: 22.2.3.12
+esid: sec-%typedarray%.prototype.foreach
description: Throws a TypeError exception when invoked as a function
info: |
22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
diff --git a/test/built-ins/TypedArray/prototype/forEach/invoked-as-method.js b/test/built-ins/TypedArray/prototype/forEach/invoked-as-method.js
index 630c7b8a5..a4a25e298 100644
--- a/test/built-ins/TypedArray/prototype/forEach/invoked-as-method.js
+++ b/test/built-ins/TypedArray/prototype/forEach/invoked-as-method.js
@@ -1,7 +1,7 @@
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
-es6id: 22.2.3.12
+esid: sec-%typedarray%.prototype.foreach
description: Requires a [[TypedArrayName]] internal slot.
info: |
22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
diff --git a/test/built-ins/TypedArray/prototype/forEach/length.js b/test/built-ins/TypedArray/prototype/forEach/length.js
index bc00a6ccf..48bdb6a25 100644
--- a/test/built-ins/TypedArray/prototype/forEach/length.js
+++ b/test/built-ins/TypedArray/prototype/forEach/length.js
@@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file.
/*---
-es6id: 22.2.3.12
+esid: sec-%typedarray%.prototype.foreach
description: >
%TypedArray%.prototype.forEach.length is 1.
info: |
@@ -20,6 +20,7 @@ info: |
object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
[[Configurable]]: true }.
includes: [propertyHelper.js, testTypedArray.js]
+features: [TypedArray]
---*/
assert.sameValue(TypedArray.prototype.forEach.length, 1);
diff --git a/test/built-ins/TypedArray/prototype/forEach/name.js b/test/built-ins/TypedArray/prototype/forEach/name.js
index 7a3cf395f..23ae3f631 100644
--- a/test/built-ins/TypedArray/prototype/forEach/name.js
+++ b/test/built-ins/TypedArray/prototype/forEach/name.js
@@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file.
/*---
-es6id: 22.2.3.12
+esid: sec-%typedarray%.prototype.foreach
description: >
%TypedArray%.prototype.forEach.name is "forEach".
info: |
@@ -17,6 +17,7 @@ info: |
object, if it exists, has the attributes { [[Writable]]: false,
[[Enumerable]]: false, [[Configurable]]: true }.
includes: [propertyHelper.js, testTypedArray.js]
+features: [TypedArray]
---*/
assert.sameValue(TypedArray.prototype.forEach.name, "forEach");
diff --git a/test/built-ins/TypedArray/prototype/forEach/prop-desc.js b/test/built-ins/TypedArray/prototype/forEach/prop-desc.js
index 86fc95ef0..58e7e95b1 100644
--- a/test/built-ins/TypedArray/prototype/forEach/prop-desc.js
+++ b/test/built-ins/TypedArray/prototype/forEach/prop-desc.js
@@ -1,7 +1,7 @@
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
-es6id: 22.2.3.12
+esid: sec-%typedarray%.prototype.foreach
description: >
"forEach" property of TypedArrayPrototype
info: |
@@ -9,6 +9,7 @@ info: |
and in Annex B.2 has the attributes { [[Writable]]: true,
[[Enumerable]]: false, [[Configurable]]: true } unless otherwise specified.
includes: [propertyHelper.js, testTypedArray.js]
+features: [TypedArray]
---*/
var TypedArrayPrototype = TypedArray.prototype;