| Index: test/mjsunit/harmony/typedarray-copywithin.js
|
| diff --git a/test/mjsunit/harmony/typedarray-copywithin.js b/test/mjsunit/harmony/typedarray-copywithin.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cccbc42f5dd35384e124b703d0c1f1bd19964a70
|
| --- /dev/null
|
| +++ b/test/mjsunit/harmony/typedarray-copywithin.js
|
| @@ -0,0 +1,175 @@
|
| +// Copyright 2015 the V8 project authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Flags: --harmony-arrays
|
| +
|
| +var typedArrayConstructors = [
|
| + Uint8Array,
|
| + Int8Array,
|
| + Uint16Array,
|
| + Int16Array,
|
| + Uint32Array,
|
| + Int32Array,
|
| + Uint8ClampedArray,
|
| + Float32Array,
|
| + Float64Array];
|
| +
|
| +function CheckEachTypedArray(fn) {
|
| + typedArrayConstructors.forEach(fn);
|
| +}
|
| +
|
| +CheckEachTypedArray(function copyWithinArity(constructor) {
|
| + assertEquals(new constructor([]).copyWithin.length, 2);
|
| +});
|
| +
|
| +
|
| +CheckEachTypedArray(function copyWithinTargetAndStart(constructor) {
|
| + // works with two arguments
|
| + assertArrayEquals([4, 5, 3, 4, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(0, 3));
|
| + assertArrayEquals([1, 4, 5, 4, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(1, 3));
|
| + assertArrayEquals([1, 3, 4, 5, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(1, 2));
|
| + assertArrayEquals([1, 2, 3, 4, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(2, 2));
|
| +});
|
| +
|
| +
|
| +CheckEachTypedArray(function copyWithinTargetStartAndEnd(constructor) {
|
| + // works with three arguments
|
| + assertArrayEquals(new constructor([1, 2, 3, 4, 5]).copyWithin(0, 3, 4),
|
| + [4, 2, 3, 4, 5]);
|
| + assertArrayEquals(new constructor([1, 2, 3, 4, 5]).copyWithin(1, 3, 4),
|
| + [1, 4, 3, 4, 5]);
|
| + assertArrayEquals(new constructor([1, 2, 3, 4, 5]).copyWithin(1, 2, 4),
|
| + [1, 3, 4, 4, 5]);
|
| +});
|
| +
|
| +
|
| +CheckEachTypedArray(function copyWithinNegativeRelativeOffsets(constructor) {
|
| + // works with negative arguments
|
| + assertArrayEquals([4, 5, 3, 4, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(0, -2));
|
| + assertArrayEquals([4, 2, 3, 4, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(0, -2, -1));
|
| + assertArrayEquals([1, 3, 3, 4, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(-4, -3, -2));
|
| + assertArrayEquals([1, 3, 4, 4, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(-4, -3, -1));
|
| + assertArrayEquals([1, 3, 4, 5, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(-4, -3));
|
| + // test with arguments equal to -this.length
|
| + assertArrayEquals([1, 2, 3, 4, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(-5, 0));
|
| +});
|
| +
|
| +
|
| +CheckEachTypedArray(function mustBeTypedArray(constructor) {
|
| + // throws on non-TypedArray values
|
| + assertThrows(function() {
|
| + return constructor.prototype.copyWithin.call(null, 0, 3);
|
| + }, TypeError);
|
| + assertThrows(function() {
|
| + return constructor.prototype.copyWithin.call(undefined, 0, 3);
|
| + }, TypeError);
|
| + assertThrows(function() {
|
| + return constructor.prototype.copyWithin.call(34, 0, 3);
|
| + }, TypeError);
|
| + assertThrows(function() {
|
| + return constructor.prototype.copyWithin.call([1, 2, 3, 4, 5], 0, 3);
|
| + }, TypeError);
|
| +});
|
| +
|
| +
|
| +CheckEachTypedArray(function copyWithinStartLessThanTarget(constructor) {
|
| + // test with target > start on 2 arguments
|
| + assertArrayEquals([1, 2, 3, 1, 2],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(3, 0));
|
| +
|
| + // test with target > start on 3 arguments
|
| + assertArrayEquals([1, 2, 3, 1, 2],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(3, 0, 4));
|
| +});
|
| +
|
| +CheckEachTypedArray(function copyWithinNonIntegerRelativeOffsets(constructor) {
|
| + // test on fractional arguments
|
| + assertArrayEquals([4, 5, 3, 4, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(0.2, 3.9));
|
| +});
|
| +
|
| +
|
| +CheckEachTypedArray(function copyWithinNegativeZeroTarget(constructor) {
|
| + // test with -0
|
| + assertArrayEquals([4, 5, 3, 4, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(-0, 3));
|
| +});
|
| +
|
| +
|
| +CheckEachTypedArray(function copyWithinTargetOutsideStart(constructor) {
|
| + // test with arguments more than this.length
|
| + assertArrayEquals([1, 2, 3, 4, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(0, 7));
|
| +
|
| + // test with arguments less than -this.length
|
| + assertArrayEquals([1, 2, 3, 4, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(-7, 0));
|
| +});
|
| +
|
| +
|
| +CheckEachTypedArray(function copyWithinEmptyArray(constructor) {
|
| + // test on empty array
|
| + assertArrayEquals([], new constructor([]).copyWithin(0, 3));
|
| +});
|
| +
|
| +
|
| +CheckEachTypedArray(function copyWithinTargetCutOff(constructor) {
|
| + // test with target range being shorter than end - start
|
| + assertArrayEquals([1, 2, 2, 3, 4], [1, 2, 3, 4, 5].copyWithin(2, 1, 4));
|
| +});
|
| +
|
| +
|
| +CheckEachTypedArray(function copyWithinOverlappingRanges(constructor) {
|
| + // test overlapping ranges
|
| + var arr = [1, 2, 3, 4, 5];
|
| + arr.copyWithin(2, 1, 4);
|
| + assertArrayEquals([1, 2, 2, 2, 3], arr.copyWithin(2, 1, 4));
|
| +});
|
| +
|
| +
|
| +CheckEachTypedArray(function copyWithinDefaultEnd(constructor) {
|
| + // undefined as third argument
|
| + assertArrayEquals([4, 5, 3, 4, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(0, 3, undefined));
|
| +});
|
| +
|
| +
|
| +CheckEachTypedArray(function copyWithinLargeArray(constructor) {
|
| + var large = 10000;
|
| +
|
| + // test on a large array
|
| + var arr = new constructor(large);
|
| + assertArrayEquals(arr, arr.copyWithin(45, 9000));
|
| +
|
| + var expected = new Array(large);
|
| + // test on numbers
|
| + for (var i = 0; i < large; i++) {
|
| + arr[i] = Math.random() * 100; // May be cast to an int
|
| + expected[i] = arr[i];
|
| + if (i >= 9000) {
|
| + expected[(i - 9000) + 45] = arr[i];
|
| + }
|
| + }
|
| + assertArrayEquals(expected, arr.copyWithin(45, 9000));
|
| +
|
| + // test array length remains same
|
| + assertEquals(large, arr.length);
|
| +});
|
| +
|
| +
|
| +CheckEachTypedArray(function copyWithinNullEnd(constructor) {
|
| + // test null on third argument is converted to +0
|
| + assertArrayEquals([1, 2, 3, 4, 5],
|
| + new constructor([1, 2, 3, 4, 5]).copyWithin(0, 3, null));
|
| +});
|
|
|