Home | History | Annotate | Download | only in Number
      1 /* The contents of this file are subject to the Netscape Public
      2  * License Version 1.1 (the "License"); you may not use this file
      3  * except in compliance with the License. You may obtain a copy of
      4  * the License at http://www.mozilla.org/NPL/
      5  *
      6  * Software distributed under the License is distributed on an "AS
      7  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
      8  * implied. See the License for the specific language governing
      9  * rights and limitations under the License.
     10  *
     11  * The Original Code is Mozilla Communicator client code, released March
     12  * 31, 1998.
     13  *
     14  * The Initial Developer of the Original Code is Netscape Communications
     15  * Corporation. Portions created by Netscape are
     16  * Copyright (C) 1998 Netscape Communications Corporation. All
     17  * Rights Reserved.
     18  *
     19  * Contributor(s):
     20  *
     21  */
     22 /**
     23     File Name:          15.7.2.js
     24     ECMA Section:       15.7.2 The Number Constructor
     25                         15.7.2.1
     26                         15.7.2.2
     27 
     28     Description:        15.7.2 When Number is called as part of a new
     29                         expression, it is a constructor:  it initializes
     30                         the newly created object.
     31 
     32                         15.7.2.1 The [[Prototype]] property of the newly
     33                         constructed object is set to othe original Number
     34                         prototype object, the one that is the initial value
     35                         of Number.prototype(0).  The [[Class]] property is
     36                         set to "Number".  The [[Value]] property of the
     37                         newly constructed object is set to ToNumber(value)
     38 
     39                         15.7.2.2 new Number().  same as in 15.7.2.1, except
     40                         the [[Value]] property is set to +0.
     41 
     42                         need to add more test cases.  see the testcases for
     43                         TypeConversion ToNumber.
     44 
     45     Author:             christine (at) netscape.com
     46     Date:               29 september 1997
     47 */
     48 
     49     var SECTION = "15.7.2";
     50     var VERSION = "ECMA_1";
     51     startTest();
     52     var TITLE   = "The Number Constructor";
     53 
     54     writeHeaderToLog( SECTION + " "+ TITLE);
     55 
     56     var testcases = getTestCases();
     57     test();
     58 
     59 function getTestCases() {
     60     var array = new Array();
     61     var item = 0;
     62 
     63     //  To verify that the object's prototype is the Number.prototype, check to see if the object's
     64     //  constructor property is the same as Number.prototype.constructor.
     65 
     66     array[item++] = new TestCase(SECTION, "(new Number()).constructor",      Number.prototype.constructor,   (new Number()).constructor );
     67 
     68     array[item++] = new TestCase(SECTION, "typeof (new Number())",         "object",           typeof (new Number()) );
     69     array[item++] = new TestCase(SECTION,  "(new Number()).valueOf()",     0,                   (new Number()).valueOf() );
     70     array[item++] = new TestCase(SECTION,
     71                                 "NUMB = new Number();NUMB.toString=Object.prototype.toString;NUMB.toString()",
     72                                 "[object Number]",
     73                                 eval("NUMB = new Number();NUMB.toString=Object.prototype.toString;NUMB.toString()") );
     74 
     75     array[item++] = new TestCase(SECTION, "(new Number(0)).constructor",     Number.prototype.constructor,    (new Number(0)).constructor );
     76     array[item++] = new TestCase(SECTION, "typeof (new Number(0))",         "object",           typeof (new Number(0)) );
     77     array[item++] = new TestCase(SECTION,  "(new Number(0)).valueOf()",     0,                   (new Number(0)).valueOf() );
     78     array[item++] = new TestCase(SECTION,
     79                                 "NUMB = new Number(0);NUMB.toString=Object.prototype.toString;NUMB.toString()",
     80                                 "[object Number]",
     81                                 eval("NUMB = new Number(0);NUMB.toString=Object.prototype.toString;NUMB.toString()") );
     82 
     83     array[item++] = new TestCase(SECTION, "(new Number(1)).constructor",     Number.prototype.constructor,    (new Number(1)).constructor );
     84     array[item++] = new TestCase(SECTION, "typeof (new Number(1))",         "object",           typeof (new Number(1)) );
     85     array[item++] = new TestCase(SECTION,  "(new Number(1)).valueOf()",     1,                   (new Number(1)).valueOf() );
     86     array[item++] = new TestCase(SECTION,
     87                                 "NUMB = new Number(1);NUMB.toString=Object.prototype.toString;NUMB.toString()",
     88                                 "[object Number]",
     89                                 eval("NUMB = new Number(1);NUMB.toString=Object.prototype.toString;NUMB.toString()") );
     90 
     91     array[item++] = new TestCase(SECTION, "(new Number(-1)).constructor",     Number.prototype.constructor,    (new Number(-1)).constructor );
     92     array[item++] = new TestCase(SECTION, "typeof (new Number(-1))",         "object",           typeof (new Number(-1)) );
     93     array[item++] = new TestCase(SECTION,  "(new Number(-1)).valueOf()",     -1,                   (new Number(-1)).valueOf() );
     94     array[item++] = new TestCase(SECTION,
     95                                 "NUMB = new Number(-1);NUMB.toString=Object.prototype.toString;NUMB.toString()",
     96                                 "[object Number]",
     97                                 eval("NUMB = new Number(-1);NUMB.toString=Object.prototype.toString;NUMB.toString()") );
     98 
     99     array[item++] = new TestCase(SECTION, "(new Number(Number.NaN)).constructor",     Number.prototype.constructor,    (new Number(Number.NaN)).constructor );
    100     array[item++] = new TestCase(SECTION, "typeof (new Number(Number.NaN))",         "object",           typeof (new Number(Number.NaN)) );
    101     array[item++] = new TestCase(SECTION,  "(new Number(Number.NaN)).valueOf()",     Number.NaN,                   (new Number(Number.NaN)).valueOf() );
    102     array[item++] = new TestCase(SECTION,
    103                                 "NUMB = new Number(Number.NaN);NUMB.toString=Object.prototype.toString;NUMB.toString()",
    104                                 "[object Number]",
    105                                 eval("NUMB = new Number(Number.NaN);NUMB.toString=Object.prototype.toString;NUMB.toString()") );
    106 
    107     array[item++] = new TestCase(SECTION, "(new Number('string')).constructor",     Number.prototype.constructor,    (new Number('string')).constructor );
    108     array[item++] = new TestCase(SECTION, "typeof (new Number('string'))",         "object",           typeof (new Number('string')) );
    109     array[item++] = new TestCase(SECTION,  "(new Number('string')).valueOf()",     Number.NaN,                   (new Number('string')).valueOf() );
    110     array[item++] = new TestCase(SECTION,
    111                                 "NUMB = new Number('string');NUMB.toString=Object.prototype.toString;NUMB.toString()",
    112                                 "[object Number]",
    113                                 eval("NUMB = new Number('string');NUMB.toString=Object.prototype.toString;NUMB.toString()") );
    114 
    115     array[item++] = new TestCase(SECTION, "(new Number(new String())).constructor",     Number.prototype.constructor,    (new Number(new String())).constructor );
    116     array[item++] = new TestCase(SECTION, "typeof (new Number(new String()))",         "object",           typeof (new Number(new String())) );
    117     array[item++] = new TestCase(SECTION,  "(new Number(new String())).valueOf()",     0,                   (new Number(new String())).valueOf() );
    118     array[item++] = new TestCase(SECTION,
    119                                 "NUMB = new Number(new String());NUMB.toString=Object.prototype.toString;NUMB.toString()",
    120                                 "[object Number]",
    121                                 eval("NUMB = new Number(new String());NUMB.toString=Object.prototype.toString;NUMB.toString()") );
    122 
    123     array[item++] = new TestCase(SECTION, "(new Number('')).constructor",     Number.prototype.constructor,    (new Number('')).constructor );
    124     array[item++] = new TestCase(SECTION, "typeof (new Number(''))",         "object",           typeof (new Number('')) );
    125     array[item++] = new TestCase(SECTION,  "(new Number('')).valueOf()",     0,                   (new Number('')).valueOf() );
    126     array[item++] = new TestCase(SECTION,
    127                                 "NUMB = new Number('');NUMB.toString=Object.prototype.toString;NUMB.toString()",
    128                                 "[object Number]",
    129                                 eval("NUMB = new Number('');NUMB.toString=Object.prototype.toString;NUMB.toString()") );
    130 
    131     array[item++] = new TestCase(SECTION, "(new Number(Number.POSITIVE_INFINITY)).constructor",     Number.prototype.constructor,    (new Number(Number.POSITIVE_INFINITY)).constructor );
    132     array[item++] = new TestCase(SECTION, "typeof (new Number(Number.POSITIVE_INFINITY))",         "object",           typeof (new Number(Number.POSITIVE_INFINITY)) );
    133     array[item++] = new TestCase(SECTION,  "(new Number(Number.POSITIVE_INFINITY)).valueOf()",     Number.POSITIVE_INFINITY,    (new Number(Number.POSITIVE_INFINITY)).valueOf() );
    134     array[item++] = new TestCase(SECTION,
    135                                 "NUMB = new Number(Number.POSITIVE_INFINITY);NUMB.toString=Object.prototype.toString;NUMB.toString()",
    136                                 "[object Number]",
    137                                 eval("NUMB = new Number(Number.POSITIVE_INFINITY);NUMB.toString=Object.prototype.toString;NUMB.toString()") );
    138 
    139     array[item++] = new TestCase(SECTION, "(new Number(Number.NEGATIVE_INFINITY)).constructor",     Number.prototype.constructor,    (new Number(Number.NEGATIVE_INFINITY)).constructor );
    140     array[item++] = new TestCase(SECTION, "typeof (new Number(Number.NEGATIVE_INFINITY))",         "object",           typeof (new Number(Number.NEGATIVE_INFINITY)) );
    141     array[item++] = new TestCase(SECTION,  "(new Number(Number.NEGATIVE_INFINITY)).valueOf()",     Number.NEGATIVE_INFINITY,                   (new Number(Number.NEGATIVE_INFINITY)).valueOf() );
    142     array[item++] = new TestCase(SECTION,
    143                                 "NUMB = new Number(Number.NEGATIVE_INFINITY);NUMB.toString=Object.prototype.toString;NUMB.toString()",
    144                                 "[object Number]",
    145                                 eval("NUMB = new Number(Number.NEGATIVE_INFINITY);NUMB.toString=Object.prototype.toString;NUMB.toString()") );
    146 
    147 
    148     array[item++] = new TestCase(SECTION, "(new Number()).constructor",     Number.prototype.constructor,    (new Number()).constructor );
    149     array[item++] = new TestCase(SECTION, "typeof (new Number())",         "object",           typeof (new Number()) );
    150     array[item++] = new TestCase(SECTION,  "(new Number()).valueOf()",     0,                   (new Number()).valueOf() );
    151     array[item++] = new TestCase(SECTION,
    152                                 "NUMB = new Number();NUMB.toString=Object.prototype.toString;NUMB.toString()",
    153                                 "[object Number]",
    154                                 eval("NUMB = new Number();NUMB.toString=Object.prototype.toString;NUMB.toString()") );
    155 
    156     return ( array );
    157 }
    158 
    159 
    160 
    161 function test() {
    162     for ( tc=0; tc < testcases.length; tc++ ) {
    163         testcases[tc].passed = writeTestCaseResult(
    164                             testcases[tc].expect,
    165                             testcases[tc].actual,
    166                             testcases[tc].description +" = "+
    167                             testcases[tc].actual );
    168 
    169         testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
    170     }
    171     stopTest();
    172     return ( testcases );
    173 }