summaryrefslogtreecommitdiff
path: root/test/built-ins/TypedArrays/from
diff options
context:
space:
mode:
Diffstat (limited to 'test/built-ins/TypedArrays/from')
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/arylk-get-length-error.js28
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/arylk-to-length-error.js28
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/custom-ctor-does-not-instantiate-ta-throws.js29
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/custom-ctor-returns-other-instance.js53
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/custom-ctor-returns-smaller-instance-throws.js41
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/custom-ctor.js34
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/inherited.js25
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/invoked-as-func.js23
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/iter-access-error.js32
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/iter-invoke-error.js32
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/iter-next-error.js31
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/iter-next-value-error.js40
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/mapfn-abrupt-completion.js32
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/mapfn-arguments.js48
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/mapfn-is-not-callable.js59
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/mapfn-this-with-thisarg.js37
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/mapfn-this-without-thisarg-non-strict.js37
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/mapfn-this-without-thisarg-strict.js37
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/nan-conversion.js50
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/new-instance-empty.js17
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/new-instance-from-ordinary-object.js53
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/new-instance-from-sparse-array.js53
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/new-instance-from-zero.js40
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/new-instance-using-custom-ctor.js28
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/new-instance-with-mapfn.js23
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/new-instance-without-mapfn.js19
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/property-abrupt-completion.js32
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/set-value-abrupt-completion.js45
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/source-value-is-symbol-throws.js23
-rw-r--r--test/built-ins/TypedArrays/from/BigInt/this-is-not-constructor.js23
30 files changed, 1052 insertions, 0 deletions
diff --git a/test/built-ins/TypedArrays/from/BigInt/arylk-get-length-error.js b/test/built-ins/TypedArrays/from/BigInt/arylk-get-length-error.js
new file mode 100644
index 000000000..2a1028aee
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/arylk-get-length-error.js
@@ -0,0 +1,28 @@
+// 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%.from
+description: Returns error produced by accessing array-like's length
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 7. Let len be ? ToLength(? Get(arrayLike, "length")).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+var arrayLike = {};
+
+Object.defineProperty(arrayLike, "length", {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ assert.throws(Test262Error, function() {
+ TA.from(arrayLike);
+ });
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/arylk-to-length-error.js b/test/built-ins/TypedArrays/from/BigInt/arylk-to-length-error.js
new file mode 100644
index 000000000..d000bac39
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/arylk-to-length-error.js
@@ -0,0 +1,28 @@
+// 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%.from
+description: Returns error produced by interpreting length property as a length
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 7. Let len be ? ToLength(? Get(arrayLike, "length")).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+var arrayLike = { length: {} };
+
+arrayLike.length = {
+ valueOf: function() {
+ throw new Test262Error();
+ }
+};
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ assert.throws(Test262Error, function() {
+ TA.from(arrayLike);
+ });
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/custom-ctor-does-not-instantiate-ta-throws.js b/test/built-ins/TypedArrays/from/BigInt/custom-ctor-does-not-instantiate-ta-throws.js
new file mode 100644
index 000000000..0571b9ac5
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/custom-ctor-does-not-instantiate-ta-throws.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%.from
+description: >
+ Custom constructor needs to instantiate a TypedArray
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 8. Let targetObj be ? TypedArrayCreate(C, «len»).
+ ...
+
+ 22.2.4.6 TypedArrayCreate ( constructor, argumentList )
+
+ 1. Let newTypedArray be ? Construct(constructor, argumentList).
+ 2. Perform ? ValidateTypedArray(newTypedArray).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var ctor = function() {};
+
+ assert.throws(TypeError, function() {
+ TA.from.call(ctor, []);
+ });
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/custom-ctor-returns-other-instance.js b/test/built-ins/TypedArrays/from/BigInt/custom-ctor-returns-other-instance.js
new file mode 100644
index 000000000..b2102fe1b
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/custom-ctor-returns-other-instance.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.
+
+/*---
+es6id: 22.2.2.1
+esid: sec-%typedarray%.from
+description: >
+ Custom constructor can return any TypedArray instance with higher or same
+ length
+info: |
+ %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 7. If usingIterator is not undefined, then
+ a. Let values be ? IterableToList(source, usingIterator).
+ b. Let len be the number of elements in values.
+ c. Let targetObj be ? TypedArrayCreate(C, «len»).
+ ...
+ 10. Let len be ? ToLength(? Get(arrayLike, "length")).
+ 11. Let targetObj be ? TypedArrayCreate(C, « len »).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, Symbol.iterator, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sourceItor = [1n, 2n];
+ var sourceObj = {
+ 0: 0n,
+ 1: 0n,
+ length: 2
+ };
+
+ var result;
+ var custom = new TA(2);
+ var ctor = function() {
+ return custom;
+ };
+
+ result = TypedArray.from.call(ctor, sourceItor);
+ assert.sameValue(result, custom, "using iterator, same length");
+
+ result = TypedArray.from.call(ctor, sourceObj);
+ assert.sameValue(result, custom, "not using iterator, same length");
+
+ custom = new TA(3);
+
+ result = TypedArray.from.call(ctor, sourceItor);
+ assert.sameValue(result, custom, "using iterator, higher length");
+
+ result = TypedArray.from.call(ctor, sourceObj);
+ assert.sameValue(result, custom, "not using iterator, higher length");
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/custom-ctor-returns-smaller-instance-throws.js b/test/built-ins/TypedArrays/from/BigInt/custom-ctor-returns-smaller-instance-throws.js
new file mode 100644
index 000000000..8c2a128d0
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/custom-ctor-returns-smaller-instance-throws.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.
+
+/*---
+es6id: 22.2.2.1
+esid: sec-%typedarray%.from
+description: >
+ Throws a TypeError if a custom `this` returns a smaller instance
+info: |
+ %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 7. If usingIterator is not undefined, then
+ a. Let values be ? IterableToList(source, usingIterator).
+ b. Let len be the number of elements in values.
+ c. Let targetObj be ? TypedArrayCreate(C, «len»).
+ ...
+ 10. Let len be ? ToLength(? Get(arrayLike, "length")).
+ 11. Let targetObj be ? TypedArrayCreate(C, « len »).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, Symbol.iterator, TypedArray]
+---*/
+
+var sourceItor = [1, 2];
+var sourceObj = {
+ length: 2
+};
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var ctor = function() {
+ return new TA(1);
+ };
+ assert.throws(TypeError, function() {
+ TA.from.call(ctor, sourceItor);
+ }, "source is using iterator");
+
+ assert.throws(TypeError, function() {
+ TA.from.call(ctor, sourceObj);
+ }, "source is not using iterator");
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/custom-ctor.js b/test/built-ins/TypedArrays/from/BigInt/custom-ctor.js
new file mode 100644
index 000000000..1b98c27cf
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/custom-ctor.js
@@ -0,0 +1,34 @@
+// 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%.from
+description: >
+ Calls and return abrupt completion from custom constructor
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 8. Let targetObj be ? TypedArrayCreate(C, «len»).
+ ...
+
+ 22.2.4.6 TypedArrayCreate ( constructor, argumentList )
+
+ 1. Let newTypedArray be ? Construct(constructor, argumentList).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var called = 0;
+ var ctor = function() {
+ called++;
+ throw new Test262Error();
+ };
+
+ assert.throws(Test262Error, function() {
+ TA.from.call(ctor, []);
+ });
+
+ assert.sameValue(called, 1);
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/inherited.js b/test/built-ins/TypedArrays/from/BigInt/inherited.js
new file mode 100644
index 000000000..08c921147
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/inherited.js
@@ -0,0 +1,25 @@
+// 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%.from
+description: >
+ `from` is %TypedArray%.from
+info: |
+ 22.2.1 The %TypedArray% Intrinsic Object
+
+ The %TypedArray% intrinsic object is a constructor function object that all of
+ the TypedArray constructor object inherit from.
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ assert.sameValue(
+ TA.from, TypedArray.from,
+ "method is inherited %TypedArray%.from"
+ );
+ assert.sameValue(
+ TA.hasOwnProperty("from"), false,
+ "constructor does not define an own property named 'from'"
+ );
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/invoked-as-func.js b/test/built-ins/TypedArrays/from/BigInt/invoked-as-func.js
new file mode 100644
index 000000000..b602a99fa
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/invoked-as-func.js
@@ -0,0 +1,23 @@
+// 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%.from
+description: >
+ "from" cannot be invoked as a function
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ 1. Let C be the this value.
+ 2. If IsConstructor(C) is false, throw a TypeError exception.
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var from = TA.from;
+
+ assert.throws(TypeError, function() {
+ from([]);
+ });
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/iter-access-error.js b/test/built-ins/TypedArrays/from/BigInt/iter-access-error.js
new file mode 100644
index 000000000..21090c3db
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/iter-access-error.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%.from
+description: Returns error produced by accessing @@iterator
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 6. Let arrayLike be ? IterableToArrayLike(source).
+ ...
+
+ 22.2.2.1.1 Runtime Semantics: IterableToArrayLike( items )
+
+ 1. Let usingIterator be ? GetMethod(items, @@iterator).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, Symbol.iterator, TypedArray]
+---*/
+
+var iter = {};
+Object.defineProperty(iter, Symbol.iterator, {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ assert.throws(Test262Error, function() {
+ TA.from(iter);
+ });
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/iter-invoke-error.js b/test/built-ins/TypedArrays/from/BigInt/iter-invoke-error.js
new file mode 100644
index 000000000..552a6d728
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/iter-invoke-error.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%.from
+description: Returns error produced by invoking @@iterator
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 6. Let arrayLike be ? IterableToArrayLike(source).
+ ...
+
+ 22.2.2.1.1 Runtime Semantics: IterableToArrayLike( items )
+
+ 1. Let usingIterator be ? GetMethod(items, @@iterator).
+ 2. If usingIterator is not undefined, then
+ a. Let iterator be ? GetIterator(items, usingIterator).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, Symbol.iterator, TypedArray]
+---*/
+
+var iter = {};
+iter[Symbol.iterator] = function() {
+ throw new Test262Error();
+};
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ assert.throws(Test262Error, function() {
+ TA.from(iter);
+ });
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/iter-next-error.js b/test/built-ins/TypedArrays/from/BigInt/iter-next-error.js
new file mode 100644
index 000000000..836da920c
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/iter-next-error.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%.from
+description: Returns error produced by advancing the iterator
+info: |
+ 22.2.2.1.1 Runtime Semantics: IterableToArrayLike( items )
+
+ 2. If usingIterator is not undefined, then
+ ...
+ d. Repeat, while next is not false
+ i. Let next be ? IteratorStep(iterator).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, Symbol.iterator, TypedArray]
+---*/
+
+var iter = {};
+iter[Symbol.iterator] = function() {
+ return {
+ next: function() {
+ throw new Test262Error();
+ }
+ };
+};
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ assert.throws(Test262Error, function() {
+ TA.from(iter);
+ });
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/iter-next-value-error.js b/test/built-ins/TypedArrays/from/BigInt/iter-next-value-error.js
new file mode 100644
index 000000000..08936b4e1
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/iter-next-value-error.js
@@ -0,0 +1,40 @@
+// 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%.from
+description: Returns error produced by accessing iterated value
+info: |
+ 22.2.2.1.1 Runtime Semantics: IterableToArrayLike( items )
+
+ 2. If usingIterator is not undefined, then
+ ...
+ d. Repeat, while next is not false
+ ...
+ ii. If next is not false, then
+ 1. Let nextValue be ? IteratorValue(next).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, Symbol.iterator, TypedArray]
+---*/
+
+var iter = {};
+iter[Symbol.iterator] = function() {
+ return {
+ next: function() {
+ var result = {};
+ Object.defineProperty(result, 'value', {
+ get: function() {
+ throw new Test262Error();
+ }
+ });
+
+ return result;
+ }
+ };
+};
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ assert.throws(Test262Error, function() {
+ TA.from(iter);
+ });
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/mapfn-abrupt-completion.js b/test/built-ins/TypedArrays/from/BigInt/mapfn-abrupt-completion.js
new file mode 100644
index 000000000..4efbf68fa
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/mapfn-abrupt-completion.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%.from
+description: >
+ Return abrupt from mapfn
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 10. Repeat, while k < len
+ ...
+ c. If mapping is true, then
+ i. Let mappedValue be ? Call(mapfn, T, « kValue, k »).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+var source = {
+ "0": 42,
+ length: 2
+};
+var mapfn = function() {
+ throw new Test262Error();
+};
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ assert.throws(Test262Error, function() {
+ TA.from(source, mapfn);
+ });
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/mapfn-arguments.js b/test/built-ins/TypedArrays/from/BigInt/mapfn-arguments.js
new file mode 100644
index 000000000..d39985829
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/mapfn-arguments.js
@@ -0,0 +1,48 @@
+// 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%.from
+description: >
+ Assert mapfn arguments
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 10. Repeat, while k < len
+ ...
+ c. If mapping is true, then
+ i. Let mappedValue be ? Call(mapfn, T, « kValue, k »).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+var source = [42, 43, 44];
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var results = [];
+ var mapfn = function(kValue, k) {
+ results.push({
+ kValue: kValue,
+ k: k,
+ argsLength: arguments.length
+ });
+ return 0n;
+ };
+
+ TA.from(source, mapfn);
+
+ assert.sameValue(results.length, 3);
+
+ assert.sameValue(results[0].kValue, 42);
+ assert.sameValue(results[0].k, 0);
+ assert.sameValue(results[0].argsLength, 2);
+
+ assert.sameValue(results[1].kValue, 43);
+ assert.sameValue(results[1].k, 1);
+ assert.sameValue(results[1].argsLength, 2);
+
+ assert.sameValue(results[2].kValue, 44);
+ assert.sameValue(results[2].k, 2);
+ assert.sameValue(results[2].argsLength, 2);
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/mapfn-is-not-callable.js b/test/built-ins/TypedArrays/from/BigInt/mapfn-is-not-callable.js
new file mode 100644
index 000000000..36565b495
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/mapfn-is-not-callable.js
@@ -0,0 +1,59 @@
+// 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%.from
+description: Throw a TypeError exception is mapfn is not callable
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 3. If mapfn was supplied and mapfn is not undefined, then
+ a. If IsCallable(mapfn) is false, throw a TypeError exception.
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, Symbol, Symbol.iterator, TypedArray]
+---*/
+
+var getIterator = 0;
+var arrayLike = {};
+Object.defineProperty(arrayLike, Symbol.iterator, {
+ get: function() {
+ getIterator++;
+ }
+});
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ assert.throws(TypeError, function() {
+ TA.from(arrayLike, null);
+ }, "mapfn is null");
+
+ assert.throws(TypeError, function() {
+ TA.from(arrayLike, 42);
+ }, "mapfn is a number");
+
+ assert.throws(TypeError, function() {
+ TA.from(arrayLike, "");
+ }, "mapfn is a string");
+
+ assert.throws(TypeError, function() {
+ TA.from(arrayLike, {});
+ }, "mapfn is an ordinary object");
+
+ assert.throws(TypeError, function() {
+ TA.from(arrayLike, []);
+ }, "mapfn is an array");
+
+ assert.throws(TypeError, function() {
+ TA.from(arrayLike, true);
+ }, "mapfn is a boolean");
+
+ var s = Symbol("1");
+ assert.throws(TypeError, function() {
+ TA.from(arrayLike, s);
+ }, "mapfn is a symbol");
+
+ assert.sameValue(
+ getIterator, 0,
+ "IsCallable(mapfn) check occurs before getting source[@@iterator]"
+ );
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/mapfn-this-with-thisarg.js b/test/built-ins/TypedArrays/from/BigInt/mapfn-this-with-thisarg.js
new file mode 100644
index 000000000..24eebdf81
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/mapfn-this-with-thisarg.js
@@ -0,0 +1,37 @@
+// 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%.from
+description: >
+ Assert mapfn `this` with thisArg
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
+ ...
+ 10. Repeat, while k < len
+ ...
+ c. If mapping is true, then
+ i. Let mappedValue be ? Call(mapfn, T, « kValue, k »).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+var source = [42, 43];
+var thisArg = {};
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var results = [];
+ var mapfn = function() {
+ results.push(this);
+ return 0n;
+ };
+
+ TA.from(source, mapfn, thisArg);
+
+ assert.sameValue(results.length, 2);
+ assert.sameValue(results[0], thisArg);
+ assert.sameValue(results[1], thisArg);
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/mapfn-this-without-thisarg-non-strict.js b/test/built-ins/TypedArrays/from/BigInt/mapfn-this-without-thisarg-non-strict.js
new file mode 100644
index 000000000..410c3244d
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/mapfn-this-without-thisarg-non-strict.js
@@ -0,0 +1,37 @@
+// 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%.from
+description: >
+ Assert mapfn `this` without thisArg
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
+ ...
+ 10. Repeat, while k < len
+ ...
+ c. If mapping is true, then
+ i. Let mappedValue be ? Call(mapfn, T, « kValue, k »).
+ ...
+includes: [testBigIntTypedArray.js]
+flags: [noStrict]
+features: [BigInt, TypedArray]
+---*/
+
+var global = this;
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var results = [];
+ var mapfn = function(x) {
+ results.push(this);
+ return x;
+ };
+
+ TA.from([42n, 43n], mapfn);
+
+ assert.sameValue(results.length, 2);
+ assert.sameValue(results[0], global);
+ assert.sameValue(results[1], global);
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/mapfn-this-without-thisarg-strict.js b/test/built-ins/TypedArrays/from/BigInt/mapfn-this-without-thisarg-strict.js
new file mode 100644
index 000000000..f8f0b282f
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/mapfn-this-without-thisarg-strict.js
@@ -0,0 +1,37 @@
+// 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%.from
+description: >
+ Assert mapfn `this` without thisArg
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
+ ...
+ 10. Repeat, while k < len
+ ...
+ c. If mapping is true, then
+ i. Let mappedValue be ? Call(mapfn, T, « kValue, k »).
+ ...
+includes: [testBigIntTypedArray.js]
+flags: [onlyStrict]
+features: [BigInt, TypedArray]
+---*/
+
+var source = [42, 43];
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var results = [];
+ var mapfn = function() {
+ results.push(this);
+ return 0n;
+ };
+
+ TA.from(source, mapfn);
+
+ assert.sameValue(results.length, 2);
+ assert.sameValue(results[0], undefined);
+ assert.sameValue(results[1], undefined);
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/nan-conversion.js b/test/built-ins/TypedArrays/from/BigInt/nan-conversion.js
new file mode 100644
index 000000000..a318c055a
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/nan-conversion.js
@@ -0,0 +1,50 @@
+// 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%.from
+description: >
+ Test NaN conversions
+info: |
+ 9.4.5.9 IntegerIndexedElementSet ( O, index, value )
+
+ ...
+ 3. Let numValue be ? ToNumber(value).
+ ...
+
+ 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value [ ,
+ isLittleEndian ] )
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var result = TA.from([NaN, undefined]);
+ assert.sameValue(result.length, 2);
+ assert.sameValue(result[0], NaN);
+ assert.sameValue(result[1], NaN);
+ assert.sameValue(result.constructor, TA);
+ assert.sameValue(Object.getPrototypeOf(result), TA.prototype);
+},
+[
+ Float32Array,
+ Float64Array
+]);
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var result = TA.from([NaN, undefined]);
+ assert.sameValue(result.length, 2);
+ assert.sameValue(result[0], 0);
+ assert.sameValue(result[1], 0);
+ assert.sameValue(result.constructor, TA);
+ assert.sameValue(Object.getPrototypeOf(result), TA.prototype);
+},
+[
+ Int8Array,
+ Int32Array,
+ Int16Array,
+ Int8Array,
+ Uint32Array,
+ Uint16Array,
+ Uint8Array,
+ Uint8ClampedArray
+]); \ No newline at end of file
diff --git a/test/built-ins/TypedArrays/from/BigInt/new-instance-empty.js b/test/built-ins/TypedArrays/from/BigInt/new-instance-empty.js
new file mode 100644
index 000000000..e0cee67e2
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/new-instance-empty.js
@@ -0,0 +1,17 @@
+// 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%.from
+description: >
+ Return a new empty TypedArray
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var result = TA.from([]);
+ assert.sameValue(result.length, 0);
+ assert.sameValue(result.constructor, TA);
+ assert.sameValue(Object.getPrototypeOf(result), TA.prototype);
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/new-instance-from-ordinary-object.js b/test/built-ins/TypedArrays/from/BigInt/new-instance-from-ordinary-object.js
new file mode 100644
index 000000000..22eff2856
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/new-instance-from-ordinary-object.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%.from
+description: >
+ Return a new TypedArray from an ordinary object
+includes: [testBigIntTypedArray.js]
+features: [BigInt, Array.prototype.values, TypedArray]
+---*/
+
+var source = {
+ "0": 42,
+ "2": 44,
+ length: 4
+};
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var result = TA.from(source);
+
+ assert.sameValue(result.length, 4);
+ assert.sameValue(result[0], 42);
+ assert.sameValue(result[1], NaN);
+ assert.sameValue(result[2], 44);
+ assert.sameValue(result[3], NaN);
+ assert.sameValue(result.constructor, TA);
+ assert.sameValue(Object.getPrototypeOf(result), TA.prototype);
+},
+[
+ Float32Array,
+ Float64Array
+]);
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var result = TA.from(source);
+
+ assert.sameValue(result.length, 4);
+ assert.sameValue(result[0], 42);
+ assert.sameValue(result[1], 0);
+ assert.sameValue(result[2], 44);
+ assert.sameValue(result[3], 0);
+ assert.sameValue(result.constructor, TA);
+ assert.sameValue(Object.getPrototypeOf(result), TA.prototype);
+},
+[
+ Int8Array,
+ Int32Array,
+ Int16Array,
+ Int8Array,
+ Uint32Array,
+ Uint16Array,
+ Uint8Array,
+ Uint8ClampedArray
+]);
diff --git a/test/built-ins/TypedArrays/from/BigInt/new-instance-from-sparse-array.js b/test/built-ins/TypedArrays/from/BigInt/new-instance-from-sparse-array.js
new file mode 100644
index 000000000..361edb9d6
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/new-instance-from-sparse-array.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%.from
+description: >
+ Return a new TypedArray from a sparse array
+includes: [testBigIntTypedArray.js]
+features: [BigInt, Array.prototype.values, TypedArray]
+---*/
+
+var source = [,,42,,44,,];
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var result = TA.from(source);
+
+ assert.sameValue(result.length, 6);
+ assert.sameValue(result[0], NaN);
+ assert.sameValue(result[1], NaN);
+ assert.sameValue(result[2], 42);
+ assert.sameValue(result[3], NaN);
+ assert.sameValue(result[4], 44);
+ assert.sameValue(result[5], NaN);
+ assert.sameValue(result.constructor, TA);
+ assert.sameValue(Object.getPrototypeOf(result), TA.prototype);
+},
+[
+ Float32Array,
+ Float64Array
+]);
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var result = TA.from(source);
+
+ assert.sameValue(result.length, 6);
+ assert.sameValue(result[0], 0);
+ assert.sameValue(result[1], 0);
+ assert.sameValue(result[2], 42);
+ assert.sameValue(result[3], 0);
+ assert.sameValue(result[4], 44);
+ assert.sameValue(result[5], 0);
+ assert.sameValue(result.constructor, TA);
+ assert.sameValue(Object.getPrototypeOf(result), TA.prototype);
+},
+[
+ Int8Array,
+ Int32Array,
+ Int16Array,
+ Int8Array,
+ Uint32Array,
+ Uint16Array,
+ Uint8Array,
+ Uint8ClampedArray
+]);
diff --git a/test/built-ins/TypedArrays/from/BigInt/new-instance-from-zero.js b/test/built-ins/TypedArrays/from/BigInt/new-instance-from-zero.js
new file mode 100644
index 000000000..cbca4484d
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/new-instance-from-zero.js
@@ -0,0 +1,40 @@
+// 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%.from
+description: >
+ Return a new TypedArray using -0 and +0
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var result = TA.from([-0, +0]);
+ assert.sameValue(result.length, 2);
+ assert.sameValue(result[0], -0, "-0 => -0");
+ assert.sameValue(result[1], 0, "+0 => 0");
+ assert.sameValue(result.constructor, TA);
+ assert.sameValue(Object.getPrototypeOf(result), TA.prototype);
+},
+[
+ Float32Array,
+ Float64Array
+]);
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var result = TA.from([-0, +0]);
+ assert.sameValue(result.length, 2);
+ assert.sameValue(result[0], 0, "-0 => 0");
+ assert.sameValue(result[1], 0, "+0 => 0");
+ assert.sameValue(result.constructor, TA);
+ assert.sameValue(Object.getPrototypeOf(result), TA.prototype);
+},
+[
+ Int16Array,
+ Int32Array,
+ Int8Array,
+ Uint16Array,
+ Uint32Array,
+ Uint8Array,
+ Uint8ClampedArray
+]); \ No newline at end of file
diff --git a/test/built-ins/TypedArrays/from/BigInt/new-instance-using-custom-ctor.js b/test/built-ins/TypedArrays/from/BigInt/new-instance-using-custom-ctor.js
new file mode 100644
index 000000000..cd012fc88
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/new-instance-using-custom-ctor.js
@@ -0,0 +1,28 @@
+// 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%.from
+description: >
+ Return a new TypedArray using a custom Constructor
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var called = 0;
+
+ var ctor = function(len) {
+ assert.sameValue(arguments.length, 1);
+ called++;
+ return new TA(len);
+ };
+
+ var result = TA.from.call(ctor, [42n, 43n, 42n]);
+ assert.sameValue(result.length, 3);
+ assert.sameValue(result[0], 42n);
+ assert.sameValue(result[1], 43n);
+ assert.sameValue(result[2], 42n);
+ assert.sameValue(result.constructor, TA);
+ assert.sameValue(Object.getPrototypeOf(result), TA.prototype);
+ assert.sameValue(called, 1);
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/new-instance-with-mapfn.js b/test/built-ins/TypedArrays/from/BigInt/new-instance-with-mapfn.js
new file mode 100644
index 000000000..600bf2a1f
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/new-instance-with-mapfn.js
@@ -0,0 +1,23 @@
+// 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%.from
+description: >
+ Return a new TypedArray using mapfn
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var mapfn = function(kValue) {
+ return kValue * 2n;
+ };
+
+ var result = TA.from([42n, 43n, 42n], mapfn);
+ assert.sameValue(result.length, 3);
+ assert.sameValue(result[0], 84n);
+ assert.sameValue(result[1], 86n);
+ assert.sameValue(result[2], 84n);
+ assert.sameValue(result.constructor, TA);
+ assert.sameValue(Object.getPrototypeOf(result), TA.prototype);
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/new-instance-without-mapfn.js b/test/built-ins/TypedArrays/from/BigInt/new-instance-without-mapfn.js
new file mode 100644
index 000000000..1243cb6aa
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/new-instance-without-mapfn.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%.from
+description: >
+ Return a new TypedArray
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var result = TA.from([42n, 43n, 42n]);
+ assert.sameValue(result.length, 3);
+ assert.sameValue(result[0], 42n);
+ assert.sameValue(result[1], 43n);
+ assert.sameValue(result[2], 42n);
+ assert.sameValue(result.constructor, TA);
+ assert.sameValue(Object.getPrototypeOf(result), TA.prototype);
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/property-abrupt-completion.js b/test/built-ins/TypedArrays/from/BigInt/property-abrupt-completion.js
new file mode 100644
index 000000000..a3bd8b446
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/property-abrupt-completion.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%.from
+description: >
+ Return abrupt from source property
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 10. Repeat, while k < len
+ ...
+ b. Let kValue be ? Get(arrayLike, Pk).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+var source = {
+ length: 2
+};
+Object.defineProperty(source, "0", {
+ get() {
+ throw new Test262Error();
+ }
+});
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ assert.throws(Test262Error, function() {
+ TA.from(source);
+ });
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/set-value-abrupt-completion.js b/test/built-ins/TypedArrays/from/BigInt/set-value-abrupt-completion.js
new file mode 100644
index 000000000..7259e8a03
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/set-value-abrupt-completion.js
@@ -0,0 +1,45 @@
+// 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%.from
+description: >
+ Return abrupt from setting a value on the new typedarray
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ ...
+ 10. Repeat, while k < len
+ ...
+ c. If mapping is true, then
+ i. Let mappedValue be ? Call(mapfn, T, « kValue, k »).
+ d. Else, let mappedValue be kValue.
+ e. Perform ? Set(targetObj, Pk, mappedValue, true).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+var obj = {
+ valueOf() {
+ throw new Test262Error();
+ }
+};
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var source = [42n, obj, 1n];
+ var lastValue;
+ var mapfn = function(kValue) {
+ lastValue = kValue;
+ return kValue;
+ };
+
+ assert.throws(Test262Error, function() {
+ TA.from(source, mapfn);
+ });
+
+ assert.sameValue(lastValue, obj, "interrupted source iteration");
+
+ assert.throws(Test262Error, function() {
+ TA.from(source);
+ });
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/source-value-is-symbol-throws.js b/test/built-ins/TypedArrays/from/BigInt/source-value-is-symbol-throws.js
new file mode 100644
index 000000000..cebc1b114
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/source-value-is-symbol-throws.js
@@ -0,0 +1,23 @@
+// 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%.from
+description: >
+ Throws a TypeError if argument is a Symbol
+info: |
+ 9.4.5.9 IntegerIndexedElementSet ( O, index, value )
+
+ ...
+ 3. Let numValue be ? ToNumber(value).
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, Symbol, TypedArray]
+---*/
+
+var s = Symbol("1");
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ assert.throws(TypeError, function() {
+ TA.from([s]);
+ });
+});
diff --git a/test/built-ins/TypedArrays/from/BigInt/this-is-not-constructor.js b/test/built-ins/TypedArrays/from/BigInt/this-is-not-constructor.js
new file mode 100644
index 000000000..711f054a5
--- /dev/null
+++ b/test/built-ins/TypedArrays/from/BigInt/this-is-not-constructor.js
@@ -0,0 +1,23 @@
+// 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%.from
+description: >
+ Throws a TypeError exception if this is not a constructor
+info: |
+ 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
+
+ 1. Let C be the this value.
+ 2. If IsConstructor(C) is false, throw a TypeError exception.
+ ...
+includes: [testBigIntTypedArray.js]
+features: [BigInt, TypedArray]
+---*/
+
+var m = { m() {} }.m;
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ assert.throws(TypeError, function() {
+ TA.from.call(m, []);
+ });
+});