diff options
Diffstat (limited to 'js/src/tests/test262/built-ins/TypedArrayConstructors/internals/Set/BigInt/string-tobigint.js')
-rw-r--r-- | js/src/tests/test262/built-ins/TypedArrayConstructors/internals/Set/BigInt/string-tobigint.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/Set/BigInt/string-tobigint.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/Set/BigInt/string-tobigint.js new file mode 100644 index 0000000000..ff5aa4145a --- /dev/null +++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/Set/BigInt/string-tobigint.js @@ -0,0 +1,87 @@ +// Copyright (C) 2018 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-assignment-operators-runtime-semantics-evaluation +description: > + Behavior for input array of Strings, successful conversion +info: | + Runtime Semantics: Evaluation + AssignmentExpression : LeftHandSideExpression = AssignmentExpression + 1. If LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral, then + ... + f. Perform ? PutValue(lref, rval). + ... + + PutValue ( V, W ) + ... + 6. Else if IsPropertyReference(V) is true, then + a. If HasPrimitiveBase(V) is true, then + i. Assert: In this case, base will never be undefined or null. + ii. Set base to ! ToObject(base). + b. Let succeeded be ? base.[[Set]](GetReferencedName(V), W, GetThisValue(V)). + c. If succeeded is false and IsStrictReference(V) is true, throw a TypeError + exception. + d. Return. + + [[Set]] ( P, V, Receiver ) + When the [[Set]] internal method of an Integer-Indexed exotic object O is + called with property key P, value V, and ECMAScript language value Receiver, + the following steps are taken: + 1. Assert: IsPropertyKey(P) is true. + 2. If Type(P) is String, 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: String + Result: + 1. Let n be StringToBigInt(prim). + 2. If n is NaN, throw a SyntaxError exception. + 3. Return n. + + StringToBigInt (argument) + Apply the algorithm in 3.1.3.1 with the following changes: + * Replace the StrUnsignedDecimalLiteral production with DecimalDigits to + not allow Infinity, decimal points, or exponents. + * If the MV is NaN, return NaN, otherwise return the BigInt which exactly + corresponds to the MV, rather than rounding to a Number. + +includes: [testBigIntTypedArray.js] +features: [align-detached-buffer-semantics-with-web-reality, BigInt, TypedArray] +---*/ +testWithBigIntTypedArrayConstructors(function(TA) { + var typedArray = new TA(1); + typedArray[0] = ''; + assert.sameValue(typedArray[0], 0n, 'The value of typedArray[0] is 0n'); + typedArray[0] = '1'; + assert.sameValue(typedArray[0], 1n, 'The value of typedArray[0] is 1n'); + + assert.throws(SyntaxError, function() { + typedArray[0] = '1n'; + }, '`typedArray[0] = "1n"` throws SyntaxError'); + + assert.throws(SyntaxError, function() { + typedArray[0] = 'Infinity'; + }, '`typedArray[0] = "Infinity"` throws SyntaxError'); + + assert.throws(SyntaxError, function() { + typedArray[0] = '1.1'; + }, '`typedArray[0] = "1.1"` throws SyntaxError'); + + assert.throws(SyntaxError, function() { + typedArray[0] = '1e7'; + }, '`typedArray[0] = "1e7"` throws SyntaxError'); +}); + +reportCompare(0, 0); |