1// Copyright 2015 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Flags: --allow-natives-syntax 6 7assertEquals(0, %ToLength(NaN)); 8assertEquals(0, %_ToLength(NaN)); 9 10assertEquals(0, %ToLength(-Infinity)); 11assertEquals(0, %_ToLength(-Infinity)); 12 13assertEquals(0, %ToLength(0)); 14assertEquals(0, %_ToLength(0)); 15 16assertEquals(0, %ToLength(.5)); 17assertEquals(0, %_ToLength(.5)); 18 19assertEquals(42, %ToLength(42.99999)); 20assertEquals(42, %_ToLength(42.99999)); 21 22assertEquals(9007199254740991, %ToLength(9007199254740991)); 23assertEquals(9007199254740991, %_ToLength(9007199254740991)); 24 25assertEquals(9007199254740991, %ToLength(Infinity)); 26assertEquals(9007199254740991, %_ToLength(Infinity)); 27 28assertEquals(0, %ToLength(null)); 29assertEquals(0, %_ToLength(null)); 30 31assertEquals(1, %ToLength(true)); 32assertEquals(1, %_ToLength(true)); 33 34assertEquals(0, %ToLength(false)); 35assertEquals(0, %_ToLength(false)); 36 37assertEquals(0, %ToLength(undefined)); 38assertEquals(0, %_ToLength(undefined)); 39 40assertEquals(0, %ToLength("-1")); 41assertEquals(0, %_ToLength("-1")); 42assertEquals(123, %ToLength("123")); 43assertEquals(123, %_ToLength("123")); 44assertEquals(0, %ToLength("random text")); 45assertEquals(0, %_ToLength("random text")); 46 47assertThrows(function() { %ToLength(Symbol.toPrimitive) }, TypeError); 48assertThrows(function() { %_ToLength(Symbol.toPrimitive) }, TypeError); 49 50var a = { toString: function() { return 54321 }}; 51assertEquals(54321, %ToLength(a)); 52assertEquals(54321, %_ToLength(a)); 53 54var b = { valueOf: function() { return 42 }}; 55assertEquals(42, %ToLength(b)); 56assertEquals(42, %_ToLength(b)); 57 58var c = { 59 toString: function() { return "x"}, 60 valueOf: function() { return 123 } 61}; 62assertEquals(123, %ToLength(c)); 63assertEquals(123, %_ToLength(c)); 64 65var d = { 66 [Symbol.toPrimitive]: function(hint) { 67 assertEquals("number", hint); 68 return 987654321; 69 } 70}; 71assertEquals(987654321, %ToLength(d)); 72assertEquals(987654321, %_ToLength(d)); 73 74var e = new Date(0); 75assertEquals(0, %ToLength(e)); 76assertEquals(0, %_ToLength(e)); 77