Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Unified Diff: test/mjsunit/harmony/typedarray-copywithin.js

Issue 1131113002: TypedArray.prototype.copyWithin method (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: better description Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/harmony-typedarray.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
+});
« no previous file with comments | « src/harmony-typedarray.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698