initial import
[vuplus_webkit] / Source / JavaScriptCore / tests / mozilla / ecma / TypeConversion / 9.6.js
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:          9.6.js
24     ECMA Section:       9.6  Type Conversion:  ToUint32
25     Description:        rules for converting an argument to an unsigned
26                         32 bit integer
27
28                         this test uses >>> 0 to convert the argument to
29                         an unsigned 32bit integer.
30
31                         1 call ToNumber on argument
32                         2 if result is NaN, 0, -0, Infinity, -Infinity
33                             return 0
34                         3 compute (sign (result(1)) * floor(abs(result 1)))
35                         4 compute result(3) modulo 2^32:
36                         5 return result(4)
37
38                         special cases:
39                             -0          returns 0
40                             Infinity    returns 0
41                             -Infinity   returns 0
42                             0           returns 0
43                             ToInt32(ToUint32(x)) == ToInt32(x) for all values of x
44                             ** NEED TO DO THIS PART IN A SEPARATE TEST FILE **
45
46
47     Author:             christine@netscape.com
48     Date:               17 july 1997
49 */
50
51     var SECTION = "9.6";
52     var VERSION = "ECMA_1";
53     startTest();
54     var testcases = getTestCases();
55
56     writeHeaderToLog( SECTION + " Type Conversion:  ToUint32");
57     test();
58
59 function test() {
60     for ( tc=0; tc < testcases.length; tc++ ) {
61         testcases[tc].passed = writeTestCaseResult(
62                             testcases[tc].expect,
63                             testcases[tc].actual,
64                             testcases[tc].description +" = "+
65                             testcases[tc].actual );
66
67         testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
68     }
69     stopTest();
70     return ( testcases );
71 }
72
73 function ToUint32( n ) {
74     n = Number( n );
75     var sign = ( n < 0 ) ? -1 : 1;
76
77     if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
78         return 0;
79     }
80     n = sign * Math.floor( Math.abs(n) )
81
82     n = n % Math.pow(2,32);
83
84     if ( n < 0 ){
85         n += Math.pow(2,32);
86     }
87
88     return ( n );
89 }
90 function getTestCases() {
91     var array = new Array();
92     var item = 0;
93
94     array[item++] = new TestCase( SECTION,    "0 >>> 0",                          0,          0 >>> 0 );
95 //    array[item++] = new TestCase( SECTION,    "+0 >>> 0",                         0,          +0 >>> 0);
96     array[item++] = new TestCase( SECTION,    "-0 >>> 0",                         0,          -0 >>> 0 );
97     array[item++] = new TestCase( SECTION,    "'Infinity' >>> 0",                 0,          "Infinity" >>> 0 );
98     array[item++] = new TestCase( SECTION,    "'-Infinity' >>> 0",                0,          "-Infinity" >>> 0);
99     array[item++] = new TestCase( SECTION,    "'+Infinity' >>> 0",                0,          "+Infinity" >>> 0 );
100     array[item++] = new TestCase( SECTION,    "Number.POSITIVE_INFINITY >>> 0",   0,          Number.POSITIVE_INFINITY >>> 0 );
101     array[item++] = new TestCase( SECTION,    "Number.NEGATIVE_INFINITY >>> 0",   0,          Number.NEGATIVE_INFINITY >>> 0 );
102     array[item++] = new TestCase( SECTION,    "Number.NaN >>> 0",                 0,          Number.NaN >>> 0 );
103
104     array[item++] = new TestCase( SECTION,    "Number.MIN_VALUE >>> 0",           0,          Number.MIN_VALUE >>> 0 );
105     array[item++] = new TestCase( SECTION,    "-Number.MIN_VALUE >>> 0",          0,          Number.MIN_VALUE >>> 0 );
106     array[item++] = new TestCase( SECTION,    "0.1 >>> 0",                        0,          0.1 >>> 0 );
107     array[item++] = new TestCase( SECTION,    "-0.1 >>> 0",                       0,          -0.1 >>> 0 );
108     array[item++] = new TestCase( SECTION,    "1 >>> 0",                          1,          1 >>> 0 );
109     array[item++] = new TestCase( SECTION,    "1.1 >>> 0",                        1,          1.1 >>> 0 );
110
111     array[item++] = new TestCase( SECTION,    "-1.1 >>> 0",                       ToUint32(-1.1),       -1.1 >>> 0 );
112     array[item++] = new TestCase( SECTION,    "-1 >>> 0",                         ToUint32(-1),         -1 >>> 0 );
113
114     array[item++] = new TestCase( SECTION,    "2147483647 >>> 0",         ToUint32(2147483647),     2147483647 >>> 0 );
115     array[item++] = new TestCase( SECTION,    "2147483648 >>> 0",         ToUint32(2147483648),     2147483648 >>> 0 );
116     array[item++] = new TestCase( SECTION,    "2147483649 >>> 0",         ToUint32(2147483649),     2147483649 >>> 0 );
117
118     array[item++] = new TestCase( SECTION,    "4294967295 >>> 0",         ToUint32(4294967295),     4294967295 >>> 0 );
119     array[item++] = new TestCase( SECTION,    "4294967296 >>> 0",         ToUint32(4294967296),     4294967296 >>> 0 );
120     array[item++] = new TestCase( SECTION,    "4294967297 >>> 0",         ToUint32(4294967297),     4294967297 >>> 0 );
121
122     array[item++] = new TestCase( SECTION,    "-2147483647 >>> 0",        ToUint32(-2147483647),    -2147483647 >>> 0 );
123     array[item++] = new TestCase( SECTION,    "-2147483648 >>> 0",        ToUint32(-2147483648),    -2147483648 >>> 0 );
124     array[item++] = new TestCase( SECTION,    "-2147483649 >>> 0",        ToUint32(-2147483649),    -2147483649 >>> 0 );
125
126     array[item++] = new TestCase( SECTION,    "-4294967295 >>> 0",        ToUint32(-4294967295),    -4294967295 >>> 0 );
127     array[item++] = new TestCase( SECTION,    "-4294967296 >>> 0",        ToUint32(-4294967296),    -4294967296 >>> 0 );
128     array[item++] = new TestCase( SECTION,    "-4294967297 >>> 0",        ToUint32(-4294967297),    -4294967297 >>> 0 );
129
130     array[item++] = new TestCase( SECTION,    "'2147483647' >>> 0",       ToUint32(2147483647),     '2147483647' >>> 0 );
131     array[item++] = new TestCase( SECTION,    "'2147483648' >>> 0",       ToUint32(2147483648),     '2147483648' >>> 0 );
132     array[item++] = new TestCase( SECTION,    "'2147483649' >>> 0",       ToUint32(2147483649),     '2147483649' >>> 0 );
133
134     array[item++] = new TestCase( SECTION,    "'4294967295' >>> 0",       ToUint32(4294967295),     '4294967295' >>> 0 );
135     array[item++] = new TestCase( SECTION,    "'4294967296' >>> 0",       ToUint32(4294967296),     '4294967296' >>> 0 );
136     array[item++] = new TestCase( SECTION,    "'4294967297' >>> 0",       ToUint32(4294967297),     '4294967297' >>> 0 );
137
138     return ( array );
139 }