michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: michael@0: /** michael@0: File Name: 15.4.2.2-1.js michael@0: ECMA Section: 15.4.2.2 new Array(len) michael@0: michael@0: Description: This description only applies of the constructor is michael@0: given two or more arguments. michael@0: michael@0: The [[Prototype]] property of the newly constructed michael@0: object is set to the original Array prototype object, michael@0: the one that is the initial value of Array.prototype(0) michael@0: (15.4.3.1). michael@0: michael@0: The [[Class]] property of the newly constructed object michael@0: is set to "Array". michael@0: michael@0: If the argument len is a number, then the length michael@0: property of the newly constructed object is set to michael@0: ToUint32(len). michael@0: michael@0: If the argument len is not a number, then the length michael@0: property of the newly constructed object is set to 1 michael@0: and the 0 property of the newly constructed object is michael@0: set to len. michael@0: michael@0: This file tests cases where len is a number. michael@0: michael@0: The cases in this test need to be updated since the michael@0: ToUint32_t description has changed. michael@0: michael@0: Author: christine@netscape.com michael@0: Date: 7 october 1997 michael@0: */ michael@0: var SECTION = "15.4.2.2-1"; michael@0: var VERSION = "ECMA_1"; michael@0: startTest(); michael@0: var TITLE = "The Array Constructor: new Array( len )"; michael@0: michael@0: writeHeaderToLog( SECTION + " "+ TITLE); michael@0: michael@0: new TestCase( SECTION, michael@0: "new Array(0)", michael@0: "", michael@0: (new Array(0)).toString() ); michael@0: michael@0: new TestCase( SECTION, michael@0: "typeof new Array(0)", michael@0: "object", michael@0: (typeof new Array(0)) ); michael@0: michael@0: new TestCase( SECTION, michael@0: "(new Array(0)).length", michael@0: 0, michael@0: (new Array(0)).length ); michael@0: michael@0: new TestCase( SECTION, michael@0: "(new Array(0)).toString", michael@0: Array.prototype.toString, michael@0: (new Array(0)).toString ); michael@0: michael@0: new TestCase( SECTION, michael@0: "new Array(1)", michael@0: "", michael@0: (new Array(1)).toString() ); michael@0: michael@0: new TestCase( SECTION, michael@0: "new Array(1).length", michael@0: 1, michael@0: (new Array(1)).length ); michael@0: michael@0: new TestCase( SECTION, michael@0: "(new Array(1)).toString", michael@0: Array.prototype.toString, michael@0: (new Array(1)).toString ); michael@0: michael@0: new TestCase( SECTION, michael@0: "(new Array(-0)).length", michael@0: 0, michael@0: (new Array(-0)).length ); michael@0: michael@0: new TestCase( SECTION, michael@0: "(new Array(0)).length", michael@0: 0, michael@0: (new Array(0)).length ); michael@0: michael@0: new TestCase( SECTION, michael@0: "(new Array(10)).length", michael@0: 10, michael@0: (new Array(10)).length ); michael@0: michael@0: new TestCase( SECTION, michael@0: "(new Array('1')).length", michael@0: 1, michael@0: (new Array('1')).length ); michael@0: michael@0: new TestCase( SECTION, michael@0: "(new Array(1000)).length", michael@0: 1000, michael@0: (new Array(1000)).length ); michael@0: michael@0: new TestCase( SECTION, michael@0: "(new Array('1000')).length", michael@0: 1, michael@0: (new Array('1000')).length ); michael@0: michael@0: new TestCase( SECTION, michael@0: "(new Array(4294967295)).length", michael@0: ToUint32(4294967295), michael@0: (new Array(4294967295)).length ); michael@0: michael@0: new TestCase( SECTION, michael@0: "(new Array('8589934592')).length", michael@0: 1, michael@0: (new Array("8589934592")).length ); michael@0: michael@0: new TestCase( SECTION, michael@0: "(new Array('4294967296')).length", michael@0: 1, michael@0: (new Array("4294967296")).length ); michael@0: michael@0: new TestCase( SECTION, michael@0: "(new Array(1073741824)).length", michael@0: ToUint32(1073741824), michael@0: (new Array(1073741824)).length ); michael@0: michael@0: test(); michael@0: michael@0: function ToUint32( n ) { michael@0: n = Number( n ); michael@0: var sign = ( n < 0 ) ? -1 : 1; michael@0: michael@0: if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { michael@0: return 0; michael@0: } michael@0: n = sign * Math.floor( Math.abs(n) ) michael@0: michael@0: n = n % Math.pow(2,32); michael@0: michael@0: if ( n < 0 ){ michael@0: n += Math.pow(2,32); michael@0: } michael@0: michael@0: return ( n ); michael@0: }