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
59function 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
73function 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}
90function 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}
140