From 3c69133cc419840c1be34638039cd8c48a7ef581 Mon Sep 17 00:00:00 2001 From: Valerie Date: Fri, 9 Mar 2018 11:23:50 -0500 Subject: Bigint typedarray conversion (#1469) * BigInt: add tests for TypedArray(typedArray) constructor of mixed 'Big'/'not Big' element types * BigInt: update info text on tests of ToBigInt * BigInt: conversion to big int on creation of Big(U)Int64 TypedArray * BigInt: Add tests for ToBigInt64 and ToBigUint64 wrapping --- .../object-arg/#undefined-tobigint.js# | 53 ++++++++++++ .../ctors-bigint/object-arg/bigint-tobigint64.js | 98 ++++++++++++++++++++++ .../ctors-bigint/object-arg/bigint-tobiguint64.js | 98 ++++++++++++++++++++++ .../ctors-bigint/object-arg/boolean-tobigint.js | 52 ++++++++++++ .../ctors-bigint/object-arg/null-tobigint.js | 53 ++++++++++++ .../ctors-bigint/object-arg/number-tobigint.js | 82 ++++++++++++++++++ .../ctors-bigint/object-arg/string-nan-tobigint.js | 61 ++++++++++++++ .../ctors-bigint/object-arg/string-tobigint.js | 77 +++++++++++++++++ .../ctors-bigint/object-arg/symbol-tobigint.js | 60 +++++++++++++ .../throws-setting-obj-to-primitive-typeerror.js | 10 +-- .../object-arg/throws-setting-obj-to-primitive.js | 10 +-- .../object-arg/throws-setting-obj-tostring.js | 12 +-- .../throws-setting-obj-valueof-typeerror.js | 12 +-- .../object-arg/throws-setting-obj-valueof.js | 12 +-- .../ctors-bigint/object-arg/undefined-tobigint.js | 53 ++++++++++++ .../src-typedarray-not-big-throws.js | 36 ++++++++ .../typedarray-arg/src-typedarray-big-throws.js | 37 ++++++++ 17 files changed, 788 insertions(+), 28 deletions(-) create mode 100644 test/built-ins/TypedArrays/ctors-bigint/object-arg/#undefined-tobigint.js# create mode 100644 test/built-ins/TypedArrays/ctors-bigint/object-arg/bigint-tobigint64.js create mode 100644 test/built-ins/TypedArrays/ctors-bigint/object-arg/bigint-tobiguint64.js create mode 100644 test/built-ins/TypedArrays/ctors-bigint/object-arg/boolean-tobigint.js create mode 100644 test/built-ins/TypedArrays/ctors-bigint/object-arg/null-tobigint.js create mode 100644 test/built-ins/TypedArrays/ctors-bigint/object-arg/number-tobigint.js create mode 100644 test/built-ins/TypedArrays/ctors-bigint/object-arg/string-nan-tobigint.js create mode 100644 test/built-ins/TypedArrays/ctors-bigint/object-arg/string-tobigint.js create mode 100644 test/built-ins/TypedArrays/ctors-bigint/object-arg/symbol-tobigint.js create mode 100644 test/built-ins/TypedArrays/ctors-bigint/object-arg/undefined-tobigint.js create mode 100644 test/built-ins/TypedArrays/ctors-bigint/typedarray-arg/src-typedarray-not-big-throws.js create mode 100644 test/built-ins/TypedArrays/ctors/typedarray-arg/src-typedarray-big-throws.js diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/#undefined-tobigint.js# b/test/built-ins/TypedArrays/ctors-bigint/object-arg/#undefined-tobigint.js# new file mode 100644 index 000000000..26f708df5 --- /dev/null +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/#undefined-tobigint.js# @@ -0,0 +1,53 @@ +// Copyright (C) 2018 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-typedarray-object +description: > + Return abrupt on undefined +info: | + TypedArray ( object ) + This description applies only if the TypedArray function is called with at + least one argument and the Type of the first argument is Object and that + object does not have either a [[TypedArrayName]] or an [[ArrayBufferData]] + internal slot. + ... + 8. Repeat, while k < len + ... + b. Let kValue be ? Get(arrayLike, Pk). + c. Perform ? Set(O, Pk, kValue, true). + ... + + [[Set]] ( P, V, Receiver) + ... + 2. If Type(P) is String and if SameValue(O, Receiver) is true, then + a. Let numericIndex be ! CanonicalNumericIndexString(P). + b. If numericIndex is not undefined, then + i. Return ? IntegerIndexedElementSet(O, numericIndex, V). + ... + + IntegerIndexedElementSet ( O, index, value ) + ... + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). + ... + + ToBigInt ( argument ) + Object, Apply the following steps: + 1. Let prim be ? ToPrimitive(argument, hint Number). + 2. Return the value that prim corresponds to in Table [BigInt Conversions] + + BigInt Conversions + Argument Type: Undefined + Result: Throw a TypeError exception. + +includes: [testBigIntTypedArray.js] +features: [BigInt, TypedArray] +---*/ + +testWithBigIntTypedArrayConstructors(function(TA) { + + assert.throws(TypeError, function() { + new TA([undefined]); + }, "abrupt completion from undefined"); + +}); diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/bigint-tobigint64.js b/test/built-ins/TypedArrays/ctors-bigint/object-arg/bigint-tobigint64.js new file mode 100644 index 000000000..501df4ec9 --- /dev/null +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/bigint-tobigint64.js @@ -0,0 +1,98 @@ +// Copyright (C) 2018 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-typedarray-object +description: > + Behavior for input array of BigInts +info: | + TypedArray ( object ) + This description applies only if the TypedArray function is called with at + least one argument and the Type of the first argument is Object and that + object does not have either a [[TypedArrayName]] or an [[ArrayBufferData]] + internal slot. + ... + 8. Repeat, while k < len + ... + b. Let kValue be ? Get(arrayLike, Pk). + c. Perform ? Set(O, Pk, kValue, true). + ... + + [[Set]] ( P, V, Receiver) + ... + 2. If Type(P) is String and if SameValue(O, Receiver) is true, then + a. Let numericIndex be ! CanonicalNumericIndexString(P). + b. If numericIndex is not undefined, then + i. Return ? IntegerIndexedElementSet(O, numericIndex, V). + ... + + IntegerIndexedElementSet ( O, index, value ) + ... + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). + ... + 15. Perform SetValueInBuffer(buffer, indexedPosition, elementType, numValue, true, "Unordered"). + // NOTE: type will be set to BigInt64 in this test + 16. Return true. + + SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isTypedArray, order [ , isLittleEndian ] ) + ... + 8. Let rawBytes be NumberToRawBytes(type, value, isLittleEndian). + ... + + NumberToRawBytes( type, value, isLittleEndian ) + ... + 3. Else, + a. Let n be the Number value of the Element Size specified in Table + [The TypedArray Constructors] for Element Type type. + b. Let convOp be the abstract operation named in the Conversion Operation + column in Table 9 for Element Type type. + + The TypedArray Constructors + Element Type: BigInt64 + Conversion Operation: ToBigInt64 + + ToBigInt64 ( argument ) + The abstract operation ToBigInt64 converts argument to one of 264 integer + values in the range -2^63 through 2^63-1, inclusive. + This abstract operation functions as follows: + 1. Let n be ? ToBigInt(argument). + 2. Let int64bit be n modulo 2^64. + 3. If int64bit ≥ 2^63, return int64bit - 2^64; otherwise return int64bit. + +includes: [testBigIntTypedArray.js] +features: [BigInt, TypedArray] +---*/ + +var vals = [ + 18446744073709551618n, // 2n ** 64n + 2n + 9223372036854775810n, // 2n ** 63n + 2n + 2n, + 0n, + -2n, + -9223372036854775810n, // -(2n ** 63n) - 2n + -18446744073709551618n, // -(2n ** 64n) - 2n +]; + +var typedArray = new BigInt64Array(vals); + +assert.sameValue(typedArray[0], 2n, + "ToBigInt64(2n ** 64n + 2n) => 2n"); + +assert.sameValue(typedArray[1], -9223372036854775806n, // 2n - 2n ** 63n + "ToBigInt64(2n ** 63n + 2n) => -9223372036854775806n"); + +assert.sameValue(typedArray[2], 2n, + "ToBigInt64(2n) => 2n"); + +assert.sameValue(typedArray[3], 0n, + "ToBigInt64(0n) => 0n"); + +assert.sameValue(typedArray[4], -2n, + "ToBigInt64( -2n) => -2n"); + +assert.sameValue(typedArray[5], 9223372036854775806n, // 2n ** 63n - 2 + "ToBigInt64( -(2n ** 64n) - 2n) => 9223372036854775806n"); + +assert.sameValue(typedArray[6], -2n, + "ToBigInt64( -(2n ** 64n) - 2n) => -2n"); + diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/bigint-tobiguint64.js b/test/built-ins/TypedArrays/ctors-bigint/object-arg/bigint-tobiguint64.js new file mode 100644 index 000000000..9f87a9be2 --- /dev/null +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/bigint-tobiguint64.js @@ -0,0 +1,98 @@ +// Copyright (C) 2018 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-typedarray-object +description: > + Behavior for input array of BigInts +info: | + TypedArray ( object ) + This description applies only if the TypedArray function is called with at + least one argument and the Type of the first argument is Object and that + object does not have either a [[TypedArrayName]] or an [[ArrayBufferData]] + internal slot. + ... + 8. Repeat, while k < len + ... + b. Let kValue be ? Get(arrayLike, Pk). + c. Perform ? Set(O, Pk, kValue, true). + ... + + [[Set]] ( P, V, Receiver) + ... + 2. If Type(P) is String and if SameValue(O, Receiver) is true, then + a. Let numericIndex be ! CanonicalNumericIndexString(P). + b. If numericIndex is not undefined, then + i. Return ? IntegerIndexedElementSet(O, numericIndex, V). + ... + + IntegerIndexedElementSet ( O, index, value ) + ... + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). + ... + 15. Perform SetValueInBuffer(buffer, indexedPosition, elementType, numValue, true, "Unordered"). + // NOTE: type will be set to BigUint64 in this test + 16. Return true. + + SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isTypedArray, order [ , isLittleEndian ] ) + ... + 8. Let rawBytes be NumberToRawBytes(type, value, isLittleEndian). + ... + + NumberToRawBytes( type, value, isLittleEndian ) + ... + 3. Else, + a. Let n be the Number value of the Element Size specified in Table + [The TypedArray Constructors] for Element Type type. + b. Let convOp be the abstract operation named in the Conversion Operation + column in Table 9 for Element Type type. + + The TypedArray Constructors + Element Type: BigUint64 + Conversion Operation: ToBigUint64 + + ToBigUint64 ( argument ) + The abstract operation ToBigInt64 converts argument to one of 264 integer + values in the range -2^63 through 2^63-1, inclusive. + This abstract operation functions as follows: + 1. Let n be ? ToBigInt(argument). + 2. Let int64bit be n modulo 2^64. + 3. Return int64bit. + +includes: [testBigIntTypedArray.js] +features: [BigInt, TypedArray] +---*/ + +var vals = [ + 18446744073709551618n, // 2n ** 64n + 2n + 9223372036854775810n, // 2n ** 63n + 2n + 2n, + 0n, + -2n, + -9223372036854775810n, // -(2n ** 63n) - 2n + -18446744073709551618n, // -(2n ** 64n) - 2n +]; + +var typedArray = new BigUint64Array(vals); + + +assert.sameValue(typedArray[0], 2n, + "ToBigUint64(2n ** 64n + 2n) => 2n"); + +assert.sameValue(typedArray[1], 9223372036854775810n, // 2n ** 63n + 2n + "ToBigUint64(2n ** 63n + 2n) => 9223372036854775810"); + +assert.sameValue(typedArray[2], 2n, + "ToBigUint64(2n) => 2n"); + +assert.sameValue(typedArray[3], 0n, + "ToBigUint64(0n) => 0n"); + +assert.sameValue(typedArray[4], 18446744073709551614n, // 2n ** 64n - 2n + "ToBigUint64( -2n) => 18446744073709551614n"); + +assert.sameValue(typedArray[5], 9223372036854775806n, // 2n ** 63n - 2n + "ToBigUint64( -(2n ** 63n) - 2n) => 9223372036854775806n"); + +assert.sameValue(typedArray[6], 18446744073709551614n, // 2n ** 64n - 2n + "ToBigUint64( -(2n ** 64n) - 2n) => 18446744073709551614n"); diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/boolean-tobigint.js b/test/built-ins/TypedArrays/ctors-bigint/object-arg/boolean-tobigint.js new file mode 100644 index 000000000..c277e50fd --- /dev/null +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/boolean-tobigint.js @@ -0,0 +1,52 @@ +// Copyright (C) 2018 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-typedarray-object +description: > + Behavior for input array of Booleans +info: | + TypedArray ( object ) + This description applies only if the TypedArray function is called with at + least one argument and the Type of the first argument is Object and that + object does not have either a [[TypedArrayName]] or an [[ArrayBufferData]] + internal slot. + ... + 8. Repeat, while k < len + ... + b. Let kValue be ? Get(arrayLike, Pk). + c. Perform ? Set(O, Pk, kValue, true). + ... + + [[Set]] ( P, V, Receiver) + ... + 2. If Type(P) is String and if SameValue(O, Receiver) is true, then + a. Let numericIndex be ! CanonicalNumericIndexString(P). + b. If numericIndex is not undefined, then + i. Return ? IntegerIndexedElementSet(O, numericIndex, V). + ... + + IntegerIndexedElementSet ( O, index, value ) + ... + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). + ... + + ToBigInt ( argument ) + Object, Apply the following steps: + 1. Let prim be ? ToPrimitive(argument, hint Number). + 2. Return the value that prim corresponds to in Table [BigInt Conversions] + + BigInt Conversions + Argument Type: Boolean + Result: Return 1n if prim is true and 0n if prim is false. + +includes: [testBigIntTypedArray.js] +features: [BigInt, TypedArray] +---*/ + +testWithBigIntTypedArrayConstructors(function(TA) { + var typedArray = new TA([false, true]); + + assert.sameValue(typedArray[0], 0n); + assert.sameValue(typedArray[1], 1n); +}); diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/null-tobigint.js b/test/built-ins/TypedArrays/ctors-bigint/object-arg/null-tobigint.js new file mode 100644 index 000000000..fdbbab93d --- /dev/null +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/null-tobigint.js @@ -0,0 +1,53 @@ +// Copyright (C) 2018 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-typedarray-object +description: > + Return abrupt on null +info: | + TypedArray ( object ) + This description applies only if the TypedArray function is called with at + least one argument and the Type of the first argument is Object and that + object does not have either a [[TypedArrayName]] or an [[ArrayBufferData]] + internal slot. + ... + 8. Repeat, while k < len + ... + b. Let kValue be ? Get(arrayLike, Pk). + c. Perform ? Set(O, Pk, kValue, true). + ... + + [[Set]] ( P, V, Receiver) + ... + 2. If Type(P) is String and if SameValue(O, Receiver) is true, then + a. Let numericIndex be ! CanonicalNumericIndexString(P). + b. If numericIndex is not undefined, then + i. Return ? IntegerIndexedElementSet(O, numericIndex, V). + ... + + IntegerIndexedElementSet ( O, index, value ) + ... + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). + ... + + ToBigInt ( argument ) + Object, Apply the following steps: + 1. Let prim be ? ToPrimitive(argument, hint Number). + 2. Return the value that prim corresponds to in Table [BigInt Conversions] + + BigInt Conversions + Argument Type: Null + Result: Throw a TypeError exception. + +includes: [testBigIntTypedArray.js] +features: [BigInt, TypedArray] +---*/ + +testWithBigIntTypedArrayConstructors(function(TA) { + + assert.throws(TypeError, function() { + new TA([null]); + }, "abrupt completion from Null"); + +}); diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/number-tobigint.js b/test/built-ins/TypedArrays/ctors-bigint/object-arg/number-tobigint.js new file mode 100644 index 000000000..886c99f16 --- /dev/null +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/number-tobigint.js @@ -0,0 +1,82 @@ +// Copyright (C) 2018 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-typedarray-object +description: > + Return abrupt on Number +info: | + 22.2.4.4 TypedArray ( object ) + + This description applies only if the TypedArray function is called with at + least one argument and the Type of the first argument is Object and that + object does not have either a [[TypedArrayName]] or an [[ArrayBufferData]] + internal slot. + + ... + 8. Repeat, while k < len + ... + b. Let kValue be ? Get(arrayLike, Pk). + c. Perform ? Set(O, Pk, kValue, true). + ... + + 9.4.5.5 [[Set]] ( P, V, Receiver) + + ... + 2. If Type(P) is String and if SameValue(O, Receiver) is true, then + a. Let numericIndex be ! CanonicalNumericIndexString(P). + b. If numericIndex is not undefined, then + i. Return ? IntegerIndexedElementSet(O, numericIndex, V). + ... + + 9.4.5.9 IntegerIndexedElementSet ( O, index, value ) + + ... + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). + ... + + ToBigInt ( argument ) + + Object, Apply the following steps: + 1. Let prim be ? ToPrimitive(argument, hint Number). + 2. Return the value that prim corresponds to in Table [BigInt Conversions] + + BigInt Conversions + Argument Type: Number + Result: Throw a TypeError exception. + +includes: [testBigIntTypedArray.js] +features: [BigInt, TypedArray] +---*/ + +testWithBigIntTypedArrayConstructors(function(TA) { + + assert.throws(TypeError, function() { + new TA([1]); + }, "abrupt completion from Number: 1"); + + assert.throws(TypeError, function() { + new TA([Math.pow(2, 63)]); + }, "abrupt completion from Number: 2**63"); + + assert.throws(TypeError, function() { + new TA([+0]); + }, "abrupt completion from Number: +0"); + + assert.throws(TypeError, function() { + new TA([-0]); + }, "abrupt completion from Number: -0"); + + assert.throws(TypeError, function() { + new TA([Infinity]); + }, "abrupt completion from Number: Infinity"); + + assert.throws(TypeError, function() { + new TA([-Infinity]); + }, "abrupt completion from Number: -Infinity"); + + assert.throws(TypeError, function() { + new TA([NaN]); + }, "abrupt completion from Number: NaN"); + +}); diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/string-nan-tobigint.js b/test/built-ins/TypedArrays/ctors-bigint/object-arg/string-nan-tobigint.js new file mode 100644 index 000000000..0726d56e5 --- /dev/null +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/string-nan-tobigint.js @@ -0,0 +1,61 @@ +// Copyright (C) 2018 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-typedarray-object +description: > + Return abrupt String, when StringToBigInt returns NaN +info: | + 22.2.4.4 TypedArray ( object ) + + This description applies only if the TypedArray function is called with at + least one argument and the Type of the first argument is Object and that + object does not have either a [[TypedArrayName]] or an [[ArrayBufferData]] + internal slot. + + ... + 8. Repeat, while k < len + ... + b. Let kValue be ? Get(arrayLike, Pk). + c. Perform ? Set(O, Pk, kValue, true). + ... + + 9.4.5.5 [[Set]] ( P, V, Receiver) + + ... + 2. If Type(P) is String and if SameValue(O, Receiver) is true, then + a. Let numericIndex be ! CanonicalNumericIndexString(P). + b. If numericIndex is not undefined, then + i. Return ? IntegerIndexedElementSet(O, numericIndex, V). + ... + + 9.4.5.9 IntegerIndexedElementSet ( O, index, value ) + + ... + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). + ... + + ToBigInt ( argument ) + + Object, Apply the following steps: + 1. Let prim be ? ToPrimitive(argument, hint Number). + 2. Return the value that prim corresponds to in Table [BigInt Conversions] + + BigInt Conversions + Argument Type: String + Result: + 1. Let n be StringToBigInt(prim). + 2. If n is NaN, throw a SyntaxError exception. + 3. Return n. + +includes: [testBigIntTypedArray.js] +features: [BigInt, TypedArray] +---*/ + +testWithBigIntTypedArrayConstructors(function(TA) { + + assert.throws(SyntaxError, function() { + new TA(["definately not a number"]); + }, "StringToBigInt(prim) == NaN"); + +}); diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/string-tobigint.js b/test/built-ins/TypedArrays/ctors-bigint/object-arg/string-tobigint.js new file mode 100644 index 000000000..90b8a41fa --- /dev/null +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/string-tobigint.js @@ -0,0 +1,77 @@ +// Copyright (C) 2018 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-typedarray-object +description: > + Behavior for input array of Strings, successful conversion +info: | + 22.2.4.4 TypedArray ( object ) + + This description applies only if the TypedArray function is called with at + least one argument and the Type of the first argument is Object and that + object does not have either a [[TypedArrayName]] or an [[ArrayBufferData]] + internal slot. + + ... + 8. Repeat, while k < len + ... + b. Let kValue be ? Get(arrayLike, Pk). + c. Perform ? Set(O, Pk, kValue, true). + ... + + 9.4.5.5 [[Set]] ( P, V, Receiver) + + ... + 2. If Type(P) is String and if SameValue(O, Receiver) is true, then + a. Let numericIndex be ! CanonicalNumericIndexString(P). + b. If numericIndex is not undefined, then + i. Return ? IntegerIndexedElementSet(O, numericIndex, V). + ... + + 9.4.5.9 IntegerIndexedElementSet ( O, index, value ) + + ... + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). + ... + + ToBigInt ( argument ) + + Object, Apply the following steps: + 1. Let prim be ? ToPrimitive(argument, hint Number). + 2. Return the value that prim corresponds to in Table [BigInt Conversions] + + BigInt Conversions + Argument Type: String + Result: + 1. Let n be StringToBigInt(prim). + 2. If n is NaN, throw a SyntaxError exception. + 3. Return n. + +includes: [testBigIntTypedArray.js] +features: [BigInt, TypedArray] +---*/ + +testWithBigIntTypedArrayConstructors(function(TA) { + var typedArray = new TA(['', '1']); + + assert.sameValue(typedArray[0], 0n); + assert.sameValue(typedArray[1], 1n); + + assert.throws(TypeError, function() { + new TA(["1n"]); + }, "A StringNumericLiteral may not include a BigIntLiteralSuffix."); + + assert.throws(TypeError, function() { + new TA(["Infinity"]); + }, "Replace the StrUnsignedDecimalLiteral production with DecimalDigits to not allow Infinity.."); + + assert.throws(TypeError, function() { + new TA(["1.1"]); + }, "Replace the StrUnsignedDecimalLiteral production with DecimalDigits to not allow... decimal points..."); + + assert.throws(TypeError, function() { + new TA(["1e7"]); + }, "Replace the StrUnsignedDecimalLiteral production with DecimalDigits to not allow... exponents..."); + +}); diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/symbol-tobigint.js b/test/built-ins/TypedArrays/ctors-bigint/object-arg/symbol-tobigint.js new file mode 100644 index 000000000..2183b6ab1 --- /dev/null +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/symbol-tobigint.js @@ -0,0 +1,60 @@ +// Copyright (C) 2018 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-typedarray-object +description: > + Return abrupt on Symbol +info: | + 22.2.4.4 TypedArray ( object ) + + This description applies only if the TypedArray function is called with at + least one argument and the Type of the first argument is Object and that + object does not have either a [[TypedArrayName]] or an [[ArrayBufferData]] + internal slot. + + ... + 8. Repeat, while k < len + ... + b. Let kValue be ? Get(arrayLike, Pk). + c. Perform ? Set(O, Pk, kValue, true). + ... + + 9.4.5.5 [[Set]] ( P, V, Receiver) + + ... + 2. If Type(P) is String and if SameValue(O, Receiver) is true, then + a. Let numericIndex be ! CanonicalNumericIndexString(P). + b. If numericIndex is not undefined, then + i. Return ? IntegerIndexedElementSet(O, numericIndex, V). + ... + + 9.4.5.9 IntegerIndexedElementSet ( O, index, value ) + + ... + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). + ... + + ToBigInt ( argument ) + + Object, Apply the following steps: + 1. Let prim be ? ToPrimitive(argument, hint Number). + 2. Return the value that prim corresponds to in Table [BigInt Conversions] + + BigInt Conversions + Argument Type: Symbol + Result: Throw a TypeError exception. + +includes: [testBigIntTypedArray.js] +features: [BigInt, TypedArray, Symbol] +---*/ + +var s = Symbol() + +testWithBigIntTypedArrayConstructors(function(TA) { + + assert.throws(TypeError, function() { + new TA([s]); + }, "abrupt completion from Symbol"); + +}); diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-to-primitive-typeerror.js b/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-to-primitive-typeerror.js index 027ad4ba6..116401a4c 100644 --- a/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-to-primitive-typeerror.js +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-to-primitive-typeerror.js @@ -31,15 +31,15 @@ info: | 9.4.5.9 IntegerIndexedElementSet ( O, index, value ) ... - 3. Let numValue be ? ToNumber(value). + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). ... - 7.1.3 ToNumber ( argument ) + ToBigInt ( argument ) Object, Apply the following steps: - - 1. Let primValue be ? ToPrimitive(argument, hint Number). - 2. Return ? ToNumber(primValue). + 1. Let prim be ? ToPrimitive(argument, hint Number). + 2. Return the value that prim corresponds to in Table 10. 7.1.1 ToPrimitive ( input [ , PreferredType ] ) diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-to-primitive.js b/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-to-primitive.js index 9d84bee67..7742ba6ac 100644 --- a/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-to-primitive.js +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-to-primitive.js @@ -31,15 +31,15 @@ info: | 9.4.5.9 IntegerIndexedElementSet ( O, index, value ) ... - 3. Let numValue be ? ToNumber(value). + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). ... - 7.1.3 ToNumber ( argument ) + ToBigInt ( argument ) Object, Apply the following steps: - - 1. Let primValue be ? ToPrimitive(argument, hint Number). - 2. Return ? ToNumber(primValue). + 1. Let prim be ? ToPrimitive(argument, hint Number). + 2. Return the value that prim corresponds to in Table 10. 7.1.1 ToPrimitive ( input [ , PreferredType ] ) diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-tostring.js b/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-tostring.js index 58801c0b0..bbe3c2c5b 100644 --- a/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-tostring.js +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-tostring.js @@ -31,15 +31,15 @@ info: | 9.4.5.9 IntegerIndexedElementSet ( O, index, value ) ... - 3. Let numValue be ? ToNumber(value). + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). ... - 7.1.3 ToNumber ( argument ) + ToBigInt ( argument ) Object, Apply the following steps: - - 1. Let primValue be ? ToPrimitive(argument, hint Number). - 2. Return ? ToNumber(primValue). + 1. Let prim be ? ToPrimitive(argument, hint Number). + 2. Return the value that prim corresponds to in Table 10. 7.1.1 ToPrimitive ( input [ , PreferredType ] ) @@ -81,7 +81,7 @@ testWithBigIntTypedArrayConstructors(function(TA) { assert.throws(Test262Error, function() { new TA([8n, sample]); - }, "abrupt completion from ToNumber(sample)"); + }, "abrupt completion from ToBigInt(sample)"); assert.sameValue(valueOf, 1, "valueOf called once"); assert.sameValue(toString, 1, "toString called once"); diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-valueof-typeerror.js b/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-valueof-typeerror.js index 90a587af7..3165cbd39 100644 --- a/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-valueof-typeerror.js +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-valueof-typeerror.js @@ -31,15 +31,15 @@ info: | 9.4.5.9 IntegerIndexedElementSet ( O, index, value ) ... - 3. Let numValue be ? ToNumber(value). + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). ... - 7.1.3 ToNumber ( argument ) + ToBigInt ( argument ) Object, Apply the following steps: - - 1. Let primValue be ? ToPrimitive(argument, hint Number). - 2. Return ? ToNumber(primValue). + 1. Let prim be ? ToPrimitive(argument, hint Number). + 2. Return the value that prim corresponds to in Table 10. 7.1.1 ToPrimitive ( input [ , PreferredType ] ) @@ -82,7 +82,7 @@ testWithBigIntTypedArrayConstructors(function(TA) { assert.throws(TypeError, function() { new TA([8n, sample]); - }, "abrupt completion from ToNumber(sample)"); + }, "abrupt completion from ToBigInt(sample)"); assert.sameValue(valueOf, 1, "valueOf called once"); assert.sameValue(toString, 1, "toString called once"); diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-valueof.js b/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-valueof.js index d5138d56e..b9f0d461a 100644 --- a/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-valueof.js +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/throws-setting-obj-valueof.js @@ -31,15 +31,15 @@ info: | 9.4.5.9 IntegerIndexedElementSet ( O, index, value ) ... - 3. Let numValue be ? ToNumber(value). + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). ... - 7.1.3 ToNumber ( argument ) + ToBigInt ( argument ) Object, Apply the following steps: - - 1. Let primValue be ? ToPrimitive(argument, hint Number). - 2. Return ? ToNumber(primValue). + 1. Let prim be ? ToPrimitive(argument, hint Number). + 2. Return the value that prim corresponds to in Table 10. 7.1.1 ToPrimitive ( input [ , PreferredType ] ) @@ -76,7 +76,7 @@ testWithBigIntTypedArrayConstructors(function(TA) { assert.throws(Test262Error, function() { new TA([8n, sample]); - }, "abrupt completion from ToNumber(sample)"); + }, "abrupt completion from ToBigInt(sample)"); assert.sameValue(valueOf, 1, "valueOf called once"); }); diff --git a/test/built-ins/TypedArrays/ctors-bigint/object-arg/undefined-tobigint.js b/test/built-ins/TypedArrays/ctors-bigint/object-arg/undefined-tobigint.js new file mode 100644 index 000000000..26f708df5 --- /dev/null +++ b/test/built-ins/TypedArrays/ctors-bigint/object-arg/undefined-tobigint.js @@ -0,0 +1,53 @@ +// Copyright (C) 2018 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-typedarray-object +description: > + Return abrupt on undefined +info: | + TypedArray ( object ) + This description applies only if the TypedArray function is called with at + least one argument and the Type of the first argument is Object and that + object does not have either a [[TypedArrayName]] or an [[ArrayBufferData]] + internal slot. + ... + 8. Repeat, while k < len + ... + b. Let kValue be ? Get(arrayLike, Pk). + c. Perform ? Set(O, Pk, kValue, true). + ... + + [[Set]] ( P, V, Receiver) + ... + 2. If Type(P) is String and if SameValue(O, Receiver) is true, then + a. Let numericIndex be ! CanonicalNumericIndexString(P). + b. If numericIndex is not undefined, then + i. Return ? IntegerIndexedElementSet(O, numericIndex, V). + ... + + IntegerIndexedElementSet ( O, index, value ) + ... + 5. If arrayTypeName is "BigUint64Array" or "BigInt64Array", + let numValue be ? ToBigInt(value). + ... + + ToBigInt ( argument ) + Object, Apply the following steps: + 1. Let prim be ? ToPrimitive(argument, hint Number). + 2. Return the value that prim corresponds to in Table [BigInt Conversions] + + BigInt Conversions + Argument Type: Undefined + Result: Throw a TypeError exception. + +includes: [testBigIntTypedArray.js] +features: [BigInt, TypedArray] +---*/ + +testWithBigIntTypedArrayConstructors(function(TA) { + + assert.throws(TypeError, function() { + new TA([undefined]); + }, "abrupt completion from undefined"); + +}); diff --git a/test/built-ins/TypedArrays/ctors-bigint/typedarray-arg/src-typedarray-not-big-throws.js b/test/built-ins/TypedArrays/ctors-bigint/typedarray-arg/src-typedarray-not-big-throws.js new file mode 100644 index 000000000..190b2356f --- /dev/null +++ b/test/built-ins/TypedArrays/ctors-bigint/typedarray-arg/src-typedarray-not-big-throws.js @@ -0,0 +1,36 @@ +// Copyright (C) 2018 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-typedarray-typedarray +description: > + If typedArray constructor argument is not a Big(U)Int, throw +info: | + 22.2.4.3 TypedArray ( typedArray ) + + This description applies only if the TypedArray function is called with at + least one argument and the Type of the first argument is Object and that + object has a [[TypedArrayName]] internal slot. + + ... + 19. Else, + ... + c. If one of srcType and elementType contains the substring "Big" and the other + does not, throw a TypeError exception. + +includes: [testBigIntTypedArray.js, testTypedArray.js] +features: [BigInt, TypedArray] +---*/ + +var notBigTypedArray; + +testWithTypedArrayConstructors(function(TA) { + + notBigTypedArray = new TA(16); + + testWithBigIntTypedArrayConstructors(function(BTA) { + assert.throws(TypeError, function() { + new BTA(notBigTypedArray); + }); + }); + +}); diff --git a/test/built-ins/TypedArrays/ctors/typedarray-arg/src-typedarray-big-throws.js b/test/built-ins/TypedArrays/ctors/typedarray-arg/src-typedarray-big-throws.js new file mode 100644 index 000000000..370f392fb --- /dev/null +++ b/test/built-ins/TypedArrays/ctors/typedarray-arg/src-typedarray-big-throws.js @@ -0,0 +1,37 @@ +// Copyright (C) 2018 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-typedarray-typedarray +description: > + If typedArray constructor argument is a Big(U)Int, throw +info: | + 22.2.4.3 TypedArray ( typedArray ) + + This description applies only if the TypedArray function is called with at + least one argument and the Type of the first argument is Object and that + object has a [[TypedArrayName]] internal slot. + + ... + 19. Else, + ... + c. If one of srcType and elementType contains the substring "Big" and the other + does not, throw a TypeError exception. + +includes: [testBigIntTypedArray.js, testTypedArray.js] +features: [BigInt, TypedArray] +---*/ + +var bigTypedArray; + +testWithBigIntTypedArrayConstructors(function(BTA) { + + bigTypedArray = new BTA(16); + + testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, function() { + new TA(bigTypedArray); + }); + }); + +}); + -- cgit v1.2.1