Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 /**
8 File Name: 11.4.8.js
9 ECMA Section: 11.4.8 Bitwise NOT Operator
10 Description: flip bits up to 32 bits
11 no special cases
12 Author: christine@netscape.com
13 Date: 7 july 1997
15 Data File Fields:
16 VALUE value passed as an argument to the ~ operator
17 E_RESULT expected return value of ~ VALUE;
19 Static variables:
20 none
22 */
24 var SECTION = "11.4.8";
25 var VERSION = "ECMA_1";
26 startTest();
28 writeHeaderToLog( SECTION + " Bitwise Not operator");
30 for ( var i = 0; i < 35; i++ ) {
31 var p = Math.pow(2,i);
33 new TestCase( SECTION, "~"+p, Not(p), ~p );
35 }
36 for ( i = 0; i < 35; i++ ) {
37 var p = -Math.pow(2,i);
39 new TestCase( SECTION, "~"+p, Not(p), ~p );
41 }
43 test();
45 function ToInteger( n ) {
46 n = Number( n );
47 var sign = ( n < 0 ) ? -1 : 1;
49 if ( n != n ) {
50 return 0;
51 }
52 if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) {
53 return n;
54 }
55 return ( sign * Math.floor(Math.abs(n)) );
56 }
57 function ToInt32( n ) {
58 n = Number( n );
59 var sign = ( n < 0 ) ? -1 : 1;
61 if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
62 return 0;
63 }
65 n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32);
66 n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n;
68 return ( n );
69 }
70 function ToUint32( n ) {
71 n = Number( n );
72 var sign = ( n < 0 ) ? -1 : 1;
74 if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
75 return 0;
76 }
77 n = sign * Math.floor( Math.abs(n) )
79 n = n % Math.pow(2,32);
81 if ( n < 0 ){
82 n += Math.pow(2,32);
83 }
85 return ( n );
86 }
87 function ToUint16( n ) {
88 var sign = ( n < 0 ) ? -1 : 1;
90 if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
91 return 0;
92 }
94 n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16);
96 if (n <0) {
97 n += Math.pow(2,16);
98 }
100 return ( n );
101 }
102 function Mask( b, n ) {
103 b = ToUint32BitString( b );
104 b = b.substring( b.length - n );
105 b = ToUint32Decimal( b );
106 return ( b );
107 }
108 function ToUint32BitString( n ) {
109 var b = "";
110 for ( var p = 31; p >=0; p-- ) {
111 if ( n >= Math.pow(2,p) ) {
112 b += "1";
113 n -= Math.pow(2,p);
114 } else {
115 b += "0";
116 }
117 }
118 return b;
119 }
120 function ToInt32BitString( n ) {
121 var b = "";
122 var sign = ( n < 0 ) ? -1 : 1;
124 b += ( sign == 1 ) ? "0" : "1";
126 for ( var p = 30; p >=0; p-- ) {
127 if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) {
128 b += ( sign == 1 ) ? "1" : "0";
129 n -= sign * Math.pow( 2, p );
130 } else {
131 b += ( sign == 1 ) ? "0" : "1";
132 }
133 }
135 return b;
136 }
137 function ToInt32Decimal( bin ) {
138 var r = 0;
139 var sign;
141 if ( Number(bin.charAt(0)) == 0 ) {
142 sign = 1;
143 r = 0;
144 } else {
145 sign = -1;
146 r = -(Math.pow(2,31));
147 }
149 for ( var j = 0; j < 31; j++ ) {
150 r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
151 }
153 return r;
154 }
155 function ToUint32Decimal( bin ) {
156 var r = 0;
158 for ( var l = bin.length; l < 32; l++ ) {
159 bin = "0" + bin;
160 }
162 for ( var j = 0; j < 31; j++ ) {
163 r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
164 }
166 return r;
167 }
168 function Not( n ) {
169 n = ToInt32(n);
170 n = ToInt32BitString(n);
172 var r = "";
174 for( var l = 0; l < n.length; l++ ) {
175 r += ( n.charAt(l) == "0" ) ? "1" : "0";
176 }
178 n = ToInt32Decimal(r);
180 return n;
181 }