| //@ requireOptions("--useChangeArrayByCopyMethods=1") |
| |
| function shouldBe(actual, expected) { |
| if (!shallowEqual(actual, expected)){ |
| throw new Error(`expected ${expected} but got ${actual}`); |
| } |
| } |
| |
| function shouldThrow(func, errorType, message) { |
| let error; |
| try { |
| func(); |
| } catch (e) { |
| error = e; |
| } |
| |
| if (!(error instanceof errorType)) |
| throw new Error(`Expected ${errorType.name}!`); |
| if (message !== undefined) { |
| if (Object.prototype.toString.call(message) === '[object RegExp]') { |
| if (!message.test(String(error))) |
| throw new Error(`expected '${String(error)}' to match ${message}!`); |
| } else { |
| if (String(error) !== message) |
| throw new Error(`expected ${String(error)} but got ${message}`); |
| } |
| } |
| } |
| |
| function shallowEqual(a, b) { |
| if (a.length !== b.length) |
| return false; |
| for (let i = 0; i < a.length; i++) { |
| if (a[i] !== b[i]) |
| return false; |
| } |
| return true; |
| } |
| |
| var sequence = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); |
| |
| // TypedArray.prototype.toReversed() |
| { |
| var reversedTypedArray = sequence.toReversed(); |
| shouldBe(reversedTypedArray, [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); |
| } |
| |
| // TypedArray.prototype.toSorted() |
| { |
| var unsortedTypedArray = new Uint8Array([9, 2, 3, 4, 56, 12, 0]); |
| let sortedTypedArray = unsortedTypedArray.toSorted(); |
| shouldBe(sortedTypedArray, [0, 2, 3, 4, 9, 12, 56]); |
| |
| // Non callable comparator. |
| var nonCallableComparator = "a"; |
| shouldThrow(() => unsortedTypedArray.toSorted(nonCallableComparator), TypeError); |
| } |
| |
| |
| // TypedArray.prototype.toSpliced() |
| { |
| var splicedTypedArray = sequence.toSpliced(3, 5); |
| shouldBe(splicedTypedArray, [1, 2, 3, 9, 10]); |
| |
| // Start missing |
| splicedTypedArray = sequence.toSpliced(); |
| shouldBe(splicedTypedArray, sequence); |
| |
| // Delete count missing. |
| splicedTypedArray = sequence.toSpliced(3); |
| shouldBe(splicedTypedArray, [1, 2, 3]); |
| |
| // Start undefined. |
| splicedTypedArray = sequence.toSpliced(undefined); |
| shouldBe(splicedTypedArray, []); |
| |
| // Delete count undefined |
| splicedTypedArray = sequence.toSpliced(3, undefined); |
| shouldBe(splicedTypedArray, sequence); |
| |
| // Insertion. |
| splicedTypedArray = sequence.toSpliced(3, 5, 11, 12, 13); |
| shouldBe(splicedTypedArray, [1, 2, 3, 11, 12, 13, 9, 10]); |
| } |
| |
| // TypedArray.prototype.with() |
| { |
| var withTypedArray = sequence.with(3, 0); |
| shouldBe(withTypedArray, [1, 2, 3, 0, 5, 6, 7, 8, 9, 10]); |
| |
| // Index missing |
| withTypedArray = sequence.with(); |
| shouldBe(withTypedArray, [0, 2, 3, 4, 5, 6, 7, 8, 9, 10]); |
| |
| // Index undefined |
| withTypedArray = sequence.with(undefined, 0); |
| shouldBe(withTypedArray, [0, 2, 3, 4, 5, 6, 7, 8, 9, 10]); |
| |
| // Invalid index. |
| shouldThrow(() => sequence.with(-11, 0), RangeError); |
| |
| // Detached buffer. |
| transferArrayBuffer(sequence.buffer); |
| shouldThrow(() => sequence.with(0, 0), TypeError); |
| } |
| |
| |