summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/TypedArray/of/resized-with-out-of-bounds-and-in-bounds-indices.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/built-ins/TypedArray/of/resized-with-out-of-bounds-and-in-bounds-indices.js')
-rw-r--r--js/src/tests/test262/built-ins/TypedArray/of/resized-with-out-of-bounds-and-in-bounds-indices.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/TypedArray/of/resized-with-out-of-bounds-and-in-bounds-indices.js b/js/src/tests/test262/built-ins/TypedArray/of/resized-with-out-of-bounds-and-in-bounds-indices.js
new file mode 100644
index 0000000000..6e0ee8a25e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArray/of/resized-with-out-of-bounds-and-in-bounds-indices.js
@@ -0,0 +1,60 @@
+// |reftest| shell-option(--enable-arraybuffer-resizable) skip-if(!ArrayBuffer.prototype.resize||!xulRuntime.shell) -- resizable-arraybuffer is not enabled unconditionally, requires shell-options
+// Copyright (C) 2024 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%typedarray%.of
+description: >
+ Performs Set operation which ignores out-of-bounds indices.
+info: |
+ %TypedArray%.of ( ...items )
+
+ ...
+ 6. Repeat, while k < len,
+ ...
+ c. Perform ? Set(newObj, Pk, kValue, true).
+ ...
+
+features: [TypedArray, resizable-arraybuffer]
+---*/
+
+let rab = new ArrayBuffer(3, {maxByteLength: 4});
+let ta = new Int8Array(rab);
+
+let one = {
+ valueOf() {
+ // Shrink buffer. Assignment to `ta[0]` should be ignored.
+ rab.resize(0);
+ return 1;
+ }
+};
+
+let two = {
+ valueOf() {
+ // Grow buffer. All following assignment should succeed.
+ rab.resize(4);
+ return 2;
+ }
+};
+
+// Typed array is correctly zero initialised.
+assert.sameValue(ta.length, 3);
+assert.sameValue(ta[0], 0);
+assert.sameValue(ta[1], 0);
+assert.sameValue(ta[2], 0);
+
+let result = Int8Array.of.call(function() {
+ return ta;
+}, one, two, 3);
+
+// Correct result value.
+assert.sameValue(result, ta);
+
+// Values are correctly set.
+assert.sameValue(ta.length, 4);
+assert.sameValue(ta[0], 0);
+assert.sameValue(ta[1], 2);
+assert.sameValue(ta[2], 3);
+assert.sameValue(ta[3], 0);
+
+reportCompare(0, 0);