diff options
Diffstat (limited to '')
-rw-r--r-- | js/src/tests/non262/TypedArray/set-tointeger.js | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/js/src/tests/non262/TypedArray/set-tointeger.js b/js/src/tests/non262/TypedArray/set-tointeger.js new file mode 100644 index 0000000000..8c1e9c2418 --- /dev/null +++ b/js/src/tests/non262/TypedArray/set-tointeger.js @@ -0,0 +1,95 @@ +// Test ToInteger conversion in %TypedArray%.prototype.set(array|typedArray, offset). + +let ta = new Int32Array(4); + +// %TypedArray%.prototype.set has two different implementations for typed array +// and non-typed array arguments. Test with both input types. +let emptySources = [[], new Int32Array(0)]; +let nonEmptySource = [[0], new Int32Array(1)]; +let sources = [...emptySources, ...nonEmptySource]; + +// Test when ToInteger(offset) is in (-1, 4). +let validOffsets = [ + // Values in [+0, 4). + 0, + 0.1, + 3, + 3.9, + + // Values in (-1, -0]. + -0, + -0.1, + -0.9, + + NaN, + + // Also include some non-number values. + undefined, + null, + true, + "", + "3", + " 1\t\n", + "some string", + {valueOf() { return 2; }}, +]; + +for (let offset of validOffsets) { + for (let source of sources) { + ta.set(source, offset); + } +} + +// Test when ToInteger(offset) isn't in (-1, 4). +let invalidOffsets = [ + // Values exceeding the typed array's length. + 5, + 2147483647, + 2147483648, + 2147483649, + 4294967295, + 4294967296, + 4294967297, + Infinity, + + // Negative values. + -1, + -1.1, + -2147483647, + -2147483648, + -2147483649, + -4294967295, + -4294967296, + -4294967297, + -Infinity, + + // Also include some non-number values. + "8", + "Infinity", + " Infinity ", + {valueOf() { return 10; }}, +]; + +for (let offset of invalidOffsets) { + for (let source of sources) { + assertThrowsInstanceOf(() => ta.set(source, offset), RangeError); + } +} + +// Test when ToInteger(offset) is in [4, 5). +for (let source of emptySources) { + ta.set(source, 4); + ta.set(source, 4.9); +} +for (let source of nonEmptySource) { + assertThrowsInstanceOf(() => ta.set(source, 4), RangeError); + assertThrowsInstanceOf(() => ta.set(source, 4.9), RangeError); +} + +// ToInteger(symbol value) throws a TypeError. +for (let source of sources) { + assertThrowsInstanceOf(() => ta.set(source, Symbol()), TypeError); +} + +if (typeof reportCompare === "function") + reportCompare(true, true); |