Index: test/mjsunit/harmony/typedarray-iteration.js |
diff --git a/test/mjsunit/harmony/typedarray-iteration.js b/test/mjsunit/harmony/typedarray-iteration.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..902fa6dfe769cac19d4abcf48eef9800a02fd694 |
--- /dev/null |
+++ b/test/mjsunit/harmony/typedarray-iteration.js |
@@ -0,0 +1,192 @@ |
+// 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 |
+ |
+// Tests for standard TypedArray array iteration functions. |
+ |
+var typedArrayConstructors = [ |
+ Uint8Array, |
+ Int8Array, |
+ Uint16Array, |
+ Int16Array, |
+ Uint32Array, |
+ Int32Array, |
+ Uint8ClampedArray, |
+ Float32Array, |
+ Float64Array |
+]; |
+ |
+function assertArrayLikeEquals(expected, value, type) { |
+ assertEquals(value.__proto__, type.prototype); |
+ assertEquals(expected.length, value.length); |
+ for (var i = 0; i < value.length; ++i) { |
+ assertEquals(expected[i], value[i]); |
+ } |
+} |
+ |
+for (var constructor of typedArrayConstructors) { |
+ // |
+ // %TypedArray%.prototype.filter |
+ // |
+ (function() { |
+ // Simple use. |
+ var a = new constructor([0,1]); |
+ assertArrayLikeEquals([0], a.filter(function(n) { return n == 0; }), |
+ constructor); |
+ assertArrayLikeEquals([0,1], a, constructor); |
+ |
+ // Use specified object as this object when calling the function. |
+ var o = { value: 42 } |
+ a = new constructor([1,42,3,42,4]); |
arv (Not doing code reviews)
2015/05/18 22:54:23
space after comma
dehrenberg
2015/05/19 00:13:45
Done.
|
+ assertArrayLikeEquals([42,42], a.filter(function(n) { |
+ return this.value == n |
+ }, o), constructor); |
+ |
+ // Modify original array. |
+ a = new constructor([1,42,3,42,4]); |
+ assertArrayLikeEquals([42,42], a.filter(function(n, index, array) { |
+ array[index] = 43; return 42 == n; |
+ }), constructor); |
+ assertArrayLikeEquals([43,43,43,43,43], a, constructor); |
+ |
+ // Create a new object in each function call when receiver is a |
+ // primitive value. See ECMA-262, Annex C. |
+ a = []; |
+ new constructor([1, 2]).filter(function() { a.push(this) }, ""); |
+ assertTrue(a[0] !== a[1]); |
+ |
+ // Do not create a new object otherwise. |
+ a = []; |
+ new constructor([1, 2]).filter(function() { a.push(this) }, {}); |
+ assertEquals(a[0], a[1]); |
+ |
+ // In strict mode primitive values should not be coerced to an object. |
+ a = []; |
+ new constructor([1, 2]).filter(function() { |
+ 'use strict'; |
+ a.push(this); |
+ }, ""); |
arv (Not doing code reviews)
2015/05/18 22:54:23
stick to either " or '
dehrenberg
2015/05/19 00:13:45
Done.
|
+ assertEquals("", a[0]); |
+ assertEquals(a[0], a[1]); |
+ |
+ // Calling this method on other types is a TypeError |
+ assertThrows(function() { |
+ constructor.prototype.filter.call([], function() {}); |
+ }, TypeError); |
+ |
+ // Shadowing the length property doesn't change anything |
+ a = new constructor([1, 2]); |
+ Object.defineProperty(a, 'length', { value: 1 }); |
+ assertArrayLikeEquals([2], a.filter(function(elt) { |
+ return elt == 2; |
+ }), constructor); |
+ })(); |
+ |
+ // |
+ // %TypedArray%.prototype.map |
arv (Not doing code reviews)
2015/05/18 22:54:24
Other tests tend to use the following format:
(fu
dehrenberg
2015/05/19 00:13:45
Done.
|
+ // |
+ (function() { |
+ var a = new constructor([0,1,2,3,4]); |
+ |
+ // Simple use. |
+ var result = [1,2,3,4,5]; |
+ assertArrayLikeEquals(result, a.map(function(n) { return n + 1; }), |
+ constructor); |
+ assertEquals(a, a); |
+ |
+ // Use specified object as this object when calling the function. |
+ var o = { delta: 42 } |
+ result = [42,43,44,45,46]; |
+ assertArrayLikeEquals(result, a.map(function(n) { |
+ return this.delta + n; |
+ }, o), constructor); |
+ |
+ // Modify original array. |
+ a = new constructor([0,1,2,3,4]); |
+ result = [1,2,3,4,5]; |
+ assertArrayLikeEquals(result, a.map(function(n, index, array) { |
+ array[index] = n + 1; |
+ return n + 1; |
+ }), constructor); |
+ assertArrayLikeEquals(result, a, constructor); |
+ |
+ // Create a new object in each function call when receiver is a |
+ // primitive value. See ECMA-262, Annex C. |
+ a = []; |
+ new constructor([1, 2]).map(function() { a.push(this) }, ""); |
+ assertTrue(a[0] !== a[1]); |
+ |
+ // Do not create a new object otherwise. |
+ a = []; |
+ new constructor([1, 2]).map(function() { a.push(this) }, {}); |
+ assertEquals(a[0], a[1]); |
+ |
+ // In strict mode primitive values should not be coerced to an object. |
+ a = []; |
+ new constructor([1, 2]).map(function() { 'use strict'; a.push(this); }, ""); |
+ assertEquals("", a[0]); |
+ assertEquals(a[0], a[1]); |
+ })(); |
+ |
arv (Not doing code reviews)
2015/05/18 22:54:24
map is a bit special since the return value might
dehrenberg
2015/05/19 00:13:45
Done.
|
+ // |
+ // %TypedArray%.prototype.some |
+ // |
+ (function() { |
+ var a = new constructor([0,1,2,3,4]); |
+ |
+ // Simple use. |
+ assertTrue(a.some(function(n) { return n == 3})); |
+ assertFalse(a.some(function(n) { return n == 5})); |
+ |
+ // Use specified object as this object when calling the function. |
+ var o = { element: 42 }; |
+ a = new constructor([1,42,3]); |
+ assertTrue(a.some(function(n) { return this.element == n; }, o)); |
+ a = new constructor([1]); |
+ assertFalse(a.some(function(n) { return this.element == n; }, o)); |
+ |
+ // Modify original array. |
+ a = new constructor([0,1,2,3]); |
+ assertTrue(a.some(function(n, index, array) { |
+ array[index] = n + 1; |
+ return n == 2; |
+ })); |
+ assertArrayLikeEquals([1,2,3,3], a, constructor); |
+ |
+ // Create a new object in each function call when receiver is a |
+ // primitive value. See ECMA-262, Annex C. |
+ a = []; |
+ new constructor([1, 2]).some(function() { a.push(this) }, ""); |
+ assertTrue(a[0] !== a[1]); |
+ |
+ // Do not create a new object otherwise. |
+ a = []; |
+ new constructor([1, 2]).some(function() { a.push(this) }, {}); |
+ assertEquals(a[0], a[1]); |
+ |
+ // In strict mode primitive values should not be coerced to an object. |
+ a = []; |
+ new constructor([1, 2]).some(function() { |
+ 'use strict'; |
+ a.push(this); |
+ }, ""); |
+ assertEquals("", a[0]); |
+ assertEquals(a[0], a[1]); |
+ |
+ // Calling this method on other types is a TypeError |
+ assertThrows(function() { |
+ constructor.prototype.some.call([], function() {}); |
+ }, TypeError); |
+ |
+ // Shadowing the length property doesn't change anything |
+ a = new constructor([1, 2]); |
+ Object.defineProperty(a, 'length', { value: 1 }); |
+ assertEquals(true, a.some(function(elt) { return elt == 2; })); |
+ assertEquals(false, Array.prototype.some.call(a, function(elt) { |
+ return elt == 2; |
+ })); |
+ })(); |
+ |
+} |