Index: test/mjsunit/es6/typedarray-set-length.js |
diff --git a/test/mjsunit/es6/typedarray-set-length.js b/test/mjsunit/es6/typedarray-set-length.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6dd5bf76e0a91397bd2f1c0e7b5e5cf49e16cbdc |
--- /dev/null |
+++ b/test/mjsunit/es6/typedarray-set-length.js |
@@ -0,0 +1,54 @@ |
+// 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. |
+ |
+var typedArrayConstructors = [ |
+ Uint8Array, |
+ Int8Array, |
+ Uint16Array, |
+ Int16Array, |
+ Uint32Array, |
+ Int32Array, |
+ Uint8ClampedArray, |
+ Float32Array, |
+ Float64Array |
+]; |
+ |
+var lengthCalled = false; |
+function lengthValue() { |
+ assertFalse(lengthCalled); |
+ lengthCalled = true; |
+ return 5; |
+} |
+ |
+// ToLength should convert these to usable lengths. |
+var goodNonIntegerLengths = [ |
+ function() { return 4.6; }, |
+ function() { return -5; }, |
+ function() { return NaN; }, |
+ function() { return "5"; }, |
+ function() { return "abc"; }, |
+ function() { return true; }, |
+ function() { return null; }, |
+ function() { return undefined; } |
+]; |
+ |
+// This will fail if you use ToLength on it. |
+function badNonIntegerLength() { |
+ return Symbol("5"); |
+} |
+ |
+for (var constructor of typedArrayConstructors) { |
+ lengthCalled = false; |
+ var a = new constructor(10); |
+ a.set({length: {valueOf: lengthValue}}); |
+ assertTrue(lengthCalled); |
+ |
+ for (var lengthFun of goodNonIntegerLengths) { |
+ a.set({length: {valueOf: lengthFun}}); |
+ } |
+ |
+ assertThrows(function() { |
+ a.set({length: {valueOf: badNonIntegerLength}}); |
+ }, TypeError); |
+} |