OLD | NEW |
1 // Copyright 2008 the V8 project authors. All rights reserved. | 1 // Copyright 2008 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 16 matching lines...) Expand all Loading... |
27 | 27 |
28 const SMI_MAX = (1 << 30) - 1; | 28 const SMI_MAX = (1 << 30) - 1; |
29 const SMI_MIN = -(1 << 30); | 29 const SMI_MIN = -(1 << 30); |
30 const ONE = 1; | 30 const ONE = 1; |
31 const ONE_HUNDRED = 100; | 31 const ONE_HUNDRED = 100; |
32 | 32 |
33 const OBJ_42 = new (function() { | 33 const OBJ_42 = new (function() { |
34 this.valueOf = function() { return 42; }; | 34 this.valueOf = function() { return 42; }; |
35 })(); | 35 })(); |
36 | 36 |
37 assertEquals(42, OBJ_42.valueOf()); | 37 assertEquals(42, OBJ_42.valueOf()); |
38 | 38 |
39 | 39 |
40 function Add1(x) { | 40 function Add1(x) { |
41 return x + 1; | 41 return x + 1; |
42 } | 42 } |
43 | 43 |
44 function Add100(x) { | 44 function Add100(x) { |
45 return x + 100; | 45 return x + 100; |
46 } | 46 } |
47 | 47 |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 | 188 |
189 assertEquals(0, Xor100(100)); | 189 assertEquals(0, Xor100(100)); |
190 assertEquals(7, Xor100Reversed(99)); | 190 assertEquals(7, Xor100Reversed(99)); |
191 assertEquals(-1073741724, Xor100(SMI_MIN)); | 191 assertEquals(-1073741724, Xor100(SMI_MIN)); |
192 assertEquals(-1073741724, Xor100Reversed(SMI_MIN)); | 192 assertEquals(-1073741724, Xor100Reversed(SMI_MIN)); |
193 assertEquals(78, Xor100(OBJ_42)); | 193 assertEquals(78, Xor100(OBJ_42)); |
194 assertEquals(78, Xor100Reversed(OBJ_42)); | 194 assertEquals(78, Xor100Reversed(OBJ_42)); |
195 | 195 |
196 var x = 0x23; var y = 0x35; | 196 var x = 0x23; var y = 0x35; |
197 assertEquals(0x16, x ^ y); | 197 assertEquals(0x16, x ^ y); |
| 198 |
| 199 // Test shift operators on non-smi inputs, giving smi and non-smi results. |
| 200 function testShiftNonSmis() { |
| 201 var pos_non_smi = 2000000000; |
| 202 var neg_non_smi = -pos_non_smi; |
| 203 var pos_smi = 1000000000; |
| 204 var neg_smi = -pos_smi; |
| 205 |
| 206 // Begin block A |
| 207 assertEquals(pos_non_smi, (pos_non_smi) >> 0); |
| 208 assertEquals(pos_non_smi, (pos_non_smi) >>> 0); |
| 209 assertEquals(pos_non_smi, (pos_non_smi) << 0); |
| 210 assertEquals(neg_non_smi, (neg_non_smi) >> 0); |
| 211 assertEquals(neg_non_smi + 0x100000000, (neg_non_smi) >>> 0); |
| 212 assertEquals(neg_non_smi, (neg_non_smi) << 0); |
| 213 assertEquals(pos_smi, (pos_smi) >> 0); |
| 214 assertEquals(pos_smi, (pos_smi) >>> 0); |
| 215 assertEquals(pos_smi, (pos_smi) << 0); |
| 216 assertEquals(neg_smi, (neg_smi) >> 0); |
| 217 assertEquals(neg_smi + 0x100000000, (neg_smi) >>> 0); |
| 218 assertEquals(neg_smi, (neg_smi) << 0); |
| 219 |
| 220 assertEquals(pos_non_smi / 2, (pos_non_smi) >> 1); |
| 221 assertEquals(pos_non_smi / 2, (pos_non_smi) >>> 1); |
| 222 assertEquals(-0x1194D800, (pos_non_smi) << 1); |
| 223 assertEquals(pos_non_smi / 8, (pos_non_smi) >> 3); |
| 224 assertEquals(pos_non_smi / 8, (pos_non_smi) >>> 3); |
| 225 assertEquals(-0x46536000, (pos_non_smi) << 3); |
| 226 assertEquals(0x73594000, (pos_non_smi) << 4); |
| 227 assertEquals(pos_non_smi, (pos_non_smi + 0.5) >> 0); |
| 228 assertEquals(pos_non_smi, (pos_non_smi + 0.5) >>> 0); |
| 229 assertEquals(pos_non_smi, (pos_non_smi + 0.5) << 0); |
| 230 assertEquals(pos_non_smi / 2, (pos_non_smi + 0.5) >> 1); |
| 231 assertEquals(pos_non_smi / 2, (pos_non_smi + 0.5) >>> 1); |
| 232 assertEquals(-0x1194D800, (pos_non_smi + 0.5) << 1); |
| 233 assertEquals(pos_non_smi / 8, (pos_non_smi + 0.5) >> 3); |
| 234 assertEquals(pos_non_smi / 8, (pos_non_smi + 0.5) >>> 3); |
| 235 assertEquals(-0x46536000, (pos_non_smi + 0.5) << 3); |
| 236 assertEquals(0x73594000, (pos_non_smi + 0.5) << 4); |
| 237 |
| 238 assertEquals(neg_non_smi / 2, (neg_non_smi) >> 1); |
| 239 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_non_smi) >>> 1); |
| 240 assertEquals(0x1194D800, (neg_non_smi) << 1); |
| 241 assertEquals(neg_non_smi / 8, (neg_non_smi) >> 3); |
| 242 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_non_smi) >>> 3); |
| 243 assertEquals(0x46536000, (neg_non_smi) << 3); |
| 244 assertEquals(-0x73594000, (neg_non_smi) << 4); |
| 245 assertEquals(neg_non_smi, (neg_non_smi - 0.5) >> 0); |
| 246 assertEquals(neg_non_smi + 0x100000000, (neg_non_smi - 0.5) >>> 0); |
| 247 assertEquals(neg_non_smi, (neg_non_smi - 0.5) << 0); |
| 248 assertEquals(neg_non_smi / 2, (neg_non_smi - 0.5) >> 1); |
| 249 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_non_smi - 0.5) >>> 1); |
| 250 assertEquals(0x1194D800, (neg_non_smi - 0.5) << 1); |
| 251 assertEquals(neg_non_smi / 8, (neg_non_smi - 0.5) >> 3); |
| 252 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_non_smi - 0.5) >>> 3); |
| 253 assertEquals(0x46536000, (neg_non_smi - 0.5) << 3); |
| 254 assertEquals(-0x73594000, (neg_non_smi - 0.5) << 4); |
| 255 |
| 256 assertEquals(pos_smi / 2, (pos_smi) >> 1); |
| 257 assertEquals(pos_smi / 2, (pos_smi) >>> 1); |
| 258 assertEquals(pos_non_smi, (pos_smi) << 1); |
| 259 assertEquals(pos_smi / 8, (pos_smi) >> 3); |
| 260 assertEquals(pos_smi / 8, (pos_smi) >>> 3); |
| 261 assertEquals(-0x2329b000, (pos_smi) << 3); |
| 262 assertEquals(0x73594000, (pos_smi) << 5); |
| 263 assertEquals(pos_smi, (pos_smi + 0.5) >> 0); |
| 264 assertEquals(pos_smi, (pos_smi + 0.5) >>> 0); |
| 265 assertEquals(pos_smi, (pos_smi + 0.5) << 0); |
| 266 assertEquals(pos_smi / 2, (pos_smi + 0.5) >> 1); |
| 267 assertEquals(pos_smi / 2, (pos_smi + 0.5) >>> 1); |
| 268 assertEquals(pos_non_smi, (pos_smi + 0.5) << 1); |
| 269 assertEquals(pos_smi / 8, (pos_smi + 0.5) >> 3); |
| 270 assertEquals(pos_smi / 8, (pos_smi + 0.5) >>> 3); |
| 271 assertEquals(-0x2329b000, (pos_smi + 0.5) << 3); |
| 272 assertEquals(0x73594000, (pos_smi + 0.5) << 5); |
| 273 |
| 274 assertEquals(neg_smi / 2, (neg_smi) >> 1); |
| 275 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_smi) >>> 1); |
| 276 assertEquals(neg_non_smi, (neg_smi) << 1); |
| 277 assertEquals(neg_smi / 8, (neg_smi) >> 3); |
| 278 assertEquals(neg_smi / 8 + 0x100000000 / 8, (neg_smi) >>> 3); |
| 279 assertEquals(0x46536000, (neg_smi) << 4); |
| 280 assertEquals(-0x73594000, (neg_smi) << 5); |
| 281 assertEquals(neg_smi, (neg_smi - 0.5) >> 0); |
| 282 assertEquals(neg_smi + 0x100000000, (neg_smi - 0.5) >>> 0); |
| 283 assertEquals(neg_smi, (neg_smi - 0.5) << 0); |
| 284 assertEquals(neg_smi / 2, (neg_smi - 0.5) >> 1); |
| 285 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_smi - 0.5) >>> 1); |
| 286 assertEquals(neg_non_smi, (neg_smi - 0.5) << 1); |
| 287 assertEquals(neg_smi / 8, (neg_smi - 0.5) >> 3); |
| 288 assertEquals(neg_smi / 8 + 0x100000000 / 8, (neg_smi - 0.5) >>> 3); |
| 289 assertEquals(0x46536000, (neg_smi - 0.5) << 4); |
| 290 assertEquals(-0x73594000, (neg_smi - 0.5) << 5); |
| 291 // End block A |
| 292 |
| 293 // Repeat block A with 2^32 added to positive numbers and |
| 294 // 2^32 subtracted from negative numbers. |
| 295 // Begin block A repeat 1 |
| 296 var two_32 = 0x100000000; |
| 297 var neg_32 = -two_32; |
| 298 assertEquals(pos_non_smi, (two_32 + pos_non_smi) >> 0); |
| 299 assertEquals(pos_non_smi, (two_32 + pos_non_smi) >>> 0); |
| 300 assertEquals(pos_non_smi, (two_32 + pos_non_smi) << 0); |
| 301 assertEquals(neg_non_smi, (neg_32 + neg_non_smi) >> 0); |
| 302 assertEquals(neg_non_smi + 0x100000000, (neg_32 + neg_non_smi) >>> 0); |
| 303 assertEquals(neg_non_smi, (neg_32 + neg_non_smi) << 0); |
| 304 assertEquals(pos_smi, (two_32 + pos_smi) >> 0); |
| 305 assertEquals(pos_smi, (two_32 + pos_smi) >>> 0); |
| 306 assertEquals(pos_smi, (two_32 + pos_smi) << 0); |
| 307 assertEquals(neg_smi, (neg_32 + neg_smi) >> 0); |
| 308 assertEquals(neg_smi + 0x100000000, (neg_32 + neg_smi) >>> 0); |
| 309 assertEquals(neg_smi, (neg_32 + neg_smi) << 0); |
| 310 |
| 311 assertEquals(pos_non_smi / 2, (two_32 + pos_non_smi) >> 1); |
| 312 assertEquals(pos_non_smi / 2, (two_32 + pos_non_smi) >>> 1); |
| 313 assertEquals(-0x1194D800, (two_32 + pos_non_smi) << 1); |
| 314 assertEquals(pos_non_smi / 8, (two_32 + pos_non_smi) >> 3); |
| 315 assertEquals(pos_non_smi / 8, (two_32 + pos_non_smi) >>> 3); |
| 316 assertEquals(-0x46536000, (two_32 + pos_non_smi) << 3); |
| 317 assertEquals(0x73594000, (two_32 + pos_non_smi) << 4); |
| 318 assertEquals(pos_non_smi, (two_32 + pos_non_smi + 0.5) >> 0); |
| 319 assertEquals(pos_non_smi, (two_32 + pos_non_smi + 0.5) >>> 0); |
| 320 assertEquals(pos_non_smi, (two_32 + pos_non_smi + 0.5) << 0); |
| 321 assertEquals(pos_non_smi / 2, (two_32 + pos_non_smi + 0.5) >> 1); |
| 322 assertEquals(pos_non_smi / 2, (two_32 + pos_non_smi + 0.5) >>> 1); |
| 323 assertEquals(-0x1194D800, (two_32 + pos_non_smi + 0.5) << 1); |
| 324 assertEquals(pos_non_smi / 8, (two_32 + pos_non_smi + 0.5) >> 3); |
| 325 assertEquals(pos_non_smi / 8, (two_32 + pos_non_smi + 0.5) >>> 3); |
| 326 assertEquals(-0x46536000, (two_32 + pos_non_smi + 0.5) << 3); |
| 327 assertEquals(0x73594000, (two_32 + pos_non_smi + 0.5) << 4); |
| 328 |
| 329 assertEquals(neg_non_smi / 2, (neg_32 + neg_non_smi) >> 1); |
| 330 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_32 + neg_non_smi) >>> 1); |
| 331 assertEquals(0x1194D800, (neg_32 + neg_non_smi) << 1); |
| 332 assertEquals(neg_non_smi / 8, (neg_32 + neg_non_smi) >> 3); |
| 333 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_32 + neg_non_smi) >>> 3); |
| 334 assertEquals(0x46536000, (neg_32 + neg_non_smi) << 3); |
| 335 assertEquals(-0x73594000, (neg_32 + neg_non_smi) << 4); |
| 336 assertEquals(neg_non_smi, (neg_32 + neg_non_smi - 0.5) >> 0); |
| 337 assertEquals(neg_non_smi + 0x100000000, (neg_32 + neg_non_smi - 0.5) >>> 0); |
| 338 assertEquals(neg_non_smi, (neg_32 + neg_non_smi - 0.5) << 0); |
| 339 assertEquals(neg_non_smi / 2, (neg_32 + neg_non_smi - 0.5) >> 1); |
| 340 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_32 + neg_non_smi - 0.5) |
| 341 >>> 1); |
| 342 assertEquals(0x1194D800, (neg_32 + neg_non_smi - 0.5) << 1); |
| 343 assertEquals(neg_non_smi / 8, (neg_32 + neg_non_smi - 0.5) >> 3); |
| 344 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_32 + neg_non_smi - 0.5) |
| 345 >>> 3); |
| 346 assertEquals(0x46536000, (neg_32 + neg_non_smi - 0.5) << 3); |
| 347 assertEquals(-0x73594000, (neg_32 + neg_non_smi - 0.5) << 4); |
| 348 |
| 349 assertEquals(pos_smi / 2, (two_32 + pos_smi) >> 1); |
| 350 assertEquals(pos_smi / 2, (two_32 + pos_smi) >>> 1); |
| 351 assertEquals(pos_non_smi, (two_32 + pos_smi) << 1); |
| 352 assertEquals(pos_smi / 8, (two_32 + pos_smi) >> 3); |
| 353 assertEquals(pos_smi / 8, (two_32 + pos_smi) >>> 3); |
| 354 assertEquals(-0x2329b000, (two_32 + pos_smi) << 3); |
| 355 assertEquals(0x73594000, (two_32 + pos_smi) << 5); |
| 356 assertEquals(pos_smi, (two_32 + pos_smi + 0.5) >> 0); |
| 357 assertEquals(pos_smi, (two_32 + pos_smi + 0.5) >>> 0); |
| 358 assertEquals(pos_smi, (two_32 + pos_smi + 0.5) << 0); |
| 359 assertEquals(pos_smi / 2, (two_32 + pos_smi + 0.5) >> 1); |
| 360 assertEquals(pos_smi / 2, (two_32 + pos_smi + 0.5) >>> 1); |
| 361 assertEquals(pos_non_smi, (two_32 + pos_smi + 0.5) << 1); |
| 362 assertEquals(pos_smi / 8, (two_32 + pos_smi + 0.5) >> 3); |
| 363 assertEquals(pos_smi / 8, (two_32 + pos_smi + 0.5) >>> 3); |
| 364 assertEquals(-0x2329b000, (two_32 + pos_smi + 0.5) << 3); |
| 365 assertEquals(0x73594000, (two_32 + pos_smi + 0.5) << 5); |
| 366 |
| 367 assertEquals(neg_smi / 2, (neg_32 + neg_smi) >> 1); |
| 368 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_32 + neg_smi) >>> 1); |
| 369 assertEquals(neg_non_smi, (neg_32 + neg_smi) << 1); |
| 370 assertEquals(neg_smi / 8, (neg_32 + neg_smi) >> 3); |
| 371 assertEquals((neg_smi + 0x100000000) / 8, (neg_32 + neg_smi) >>> 3); |
| 372 assertEquals(0x46536000, (neg_32 + neg_smi) << 4); |
| 373 assertEquals(-0x73594000, (neg_32 + neg_smi) << 5); |
| 374 assertEquals(neg_smi, (neg_32 + neg_smi - 0.5) >> 0); |
| 375 assertEquals(neg_smi + 0x100000000, (neg_32 + neg_smi - 0.5) >>> 0); |
| 376 assertEquals(neg_smi, (neg_32 + neg_smi - 0.5) << 0); |
| 377 assertEquals(neg_smi / 2, (neg_32 + neg_smi - 0.5) >> 1); |
| 378 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_32 + neg_smi - 0.5) >>> 1); |
| 379 assertEquals(neg_non_smi, (neg_32 + neg_smi - 0.5) << 1); |
| 380 assertEquals(neg_smi / 8, (neg_32 + neg_smi - 0.5) >> 3); |
| 381 assertEquals(neg_smi / 8 + 0x100000000 / 8, (neg_32 + neg_smi - 0.5) >>> 3); |
| 382 assertEquals(0x46536000, (neg_32 + neg_smi - 0.5) << 4); |
| 383 assertEquals(-0x73594000, (neg_32 + neg_smi - 0.5) << 5); |
| 384 // End block A repeat 1 |
| 385 // Repeat block A with shift amounts in variables intialized with |
| 386 // a constant. |
| 387 var zero = 0; |
| 388 var one = 1; |
| 389 var three = 3; |
| 390 var four = 4; |
| 391 var five = 5; |
| 392 // Begin block A repeat 2 |
| 393 assertEquals(pos_non_smi, (pos_non_smi) >> zero); |
| 394 assertEquals(pos_non_smi, (pos_non_smi) >>> zero); |
| 395 assertEquals(pos_non_smi, (pos_non_smi) << zero); |
| 396 assertEquals(neg_non_smi, (neg_non_smi) >> zero); |
| 397 assertEquals(neg_non_smi + 0x100000000, (neg_non_smi) >>> zero); |
| 398 assertEquals(neg_non_smi, (neg_non_smi) << zero); |
| 399 assertEquals(pos_smi, (pos_smi) >> zero); |
| 400 assertEquals(pos_smi, (pos_smi) >>> zero); |
| 401 assertEquals(pos_smi, (pos_smi) << zero); |
| 402 assertEquals(neg_smi, (neg_smi) >> zero); |
| 403 assertEquals(neg_smi + 0x100000000, (neg_smi) >>> zero); |
| 404 assertEquals(neg_smi, (neg_smi) << zero); |
| 405 |
| 406 assertEquals(pos_non_smi / 2, (pos_non_smi) >> one); |
| 407 assertEquals(pos_non_smi / 2, (pos_non_smi) >>> one); |
| 408 assertEquals(-0x1194D800, (pos_non_smi) << one); |
| 409 assertEquals(pos_non_smi / 8, (pos_non_smi) >> three); |
| 410 assertEquals(pos_non_smi / 8, (pos_non_smi) >>> three); |
| 411 assertEquals(-0x46536000, (pos_non_smi) << three); |
| 412 assertEquals(0x73594000, (pos_non_smi) << four); |
| 413 assertEquals(pos_non_smi, (pos_non_smi + 0.5) >> zero); |
| 414 assertEquals(pos_non_smi, (pos_non_smi + 0.5) >>> zero); |
| 415 assertEquals(pos_non_smi, (pos_non_smi + 0.5) << zero); |
| 416 assertEquals(pos_non_smi / 2, (pos_non_smi + 0.5) >> one); |
| 417 assertEquals(pos_non_smi / 2, (pos_non_smi + 0.5) >>> one); |
| 418 assertEquals(-0x1194D800, (pos_non_smi + 0.5) << one); |
| 419 assertEquals(pos_non_smi / 8, (pos_non_smi + 0.5) >> three); |
| 420 assertEquals(pos_non_smi / 8, (pos_non_smi + 0.5) >>> three); |
| 421 assertEquals(-0x46536000, (pos_non_smi + 0.5) << three); |
| 422 assertEquals(0x73594000, (pos_non_smi + 0.5) << four); |
| 423 |
| 424 assertEquals(neg_non_smi / 2, (neg_non_smi) >> one); |
| 425 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_non_smi) >>> one); |
| 426 assertEquals(0x1194D800, (neg_non_smi) << one); |
| 427 assertEquals(neg_non_smi / 8, (neg_non_smi) >> three); |
| 428 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_non_smi) >>> three); |
| 429 assertEquals(0x46536000, (neg_non_smi) << three); |
| 430 assertEquals(-0x73594000, (neg_non_smi) << four); |
| 431 assertEquals(neg_non_smi, (neg_non_smi - 0.5) >> zero); |
| 432 assertEquals(neg_non_smi + 0x100000000, (neg_non_smi - 0.5) >>> zero); |
| 433 assertEquals(neg_non_smi, (neg_non_smi - 0.5) << zero); |
| 434 assertEquals(neg_non_smi / 2, (neg_non_smi - 0.5) >> one); |
| 435 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_non_smi - 0.5) >>> one); |
| 436 assertEquals(0x1194D800, (neg_non_smi - 0.5) << one); |
| 437 assertEquals(neg_non_smi / 8, (neg_non_smi - 0.5) >> three); |
| 438 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_non_smi - 0.5) |
| 439 >>> three); |
| 440 assertEquals(0x46536000, (neg_non_smi - 0.5) << three); |
| 441 assertEquals(-0x73594000, (neg_non_smi - 0.5) << four); |
| 442 |
| 443 assertEquals(pos_smi / 2, (pos_smi) >> one); |
| 444 assertEquals(pos_smi / 2, (pos_smi) >>> one); |
| 445 assertEquals(pos_non_smi, (pos_smi) << one); |
| 446 assertEquals(pos_smi / 8, (pos_smi) >> three); |
| 447 assertEquals(pos_smi / 8, (pos_smi) >>> three); |
| 448 assertEquals(-0x2329b000, (pos_smi) << three); |
| 449 assertEquals(0x73594000, (pos_smi) << five); |
| 450 assertEquals(pos_smi, (pos_smi + 0.5) >> zero); |
| 451 assertEquals(pos_smi, (pos_smi + 0.5) >>> zero); |
| 452 assertEquals(pos_smi, (pos_smi + 0.5) << zero); |
| 453 assertEquals(pos_smi / 2, (pos_smi + 0.5) >> one); |
| 454 assertEquals(pos_smi / 2, (pos_smi + 0.5) >>> one); |
| 455 assertEquals(pos_non_smi, (pos_smi + 0.5) << one); |
| 456 assertEquals(pos_smi / 8, (pos_smi + 0.5) >> three); |
| 457 assertEquals(pos_smi / 8, (pos_smi + 0.5) >>> three); |
| 458 assertEquals(-0x2329b000, (pos_smi + 0.5) << three); |
| 459 assertEquals(0x73594000, (pos_smi + 0.5) << five); |
| 460 |
| 461 assertEquals(neg_smi / 2, (neg_smi) >> one); |
| 462 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_smi) >>> one); |
| 463 assertEquals(neg_non_smi, (neg_smi) << one); |
| 464 assertEquals(neg_smi / 8, (neg_smi) >> three); |
| 465 assertEquals(neg_smi / 8 + 0x100000000 / 8, (neg_smi) >>> three); |
| 466 assertEquals(0x46536000, (neg_smi) << four); |
| 467 assertEquals(-0x73594000, (neg_smi) << five); |
| 468 assertEquals(neg_smi, (neg_smi - 0.5) >> zero); |
| 469 assertEquals(neg_smi + 0x100000000, (neg_smi - 0.5) >>> zero); |
| 470 assertEquals(neg_smi, (neg_smi - 0.5) << zero); |
| 471 assertEquals(neg_smi / 2, (neg_smi - 0.5) >> one); |
| 472 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_smi - 0.5) >>> one); |
| 473 assertEquals(neg_non_smi, (neg_smi - 0.5) << one); |
| 474 assertEquals(neg_smi / 8, (neg_smi - 0.5) >> three); |
| 475 assertEquals(neg_smi / 8 + 0x100000000 / 8, (neg_smi - 0.5) >>> three); |
| 476 assertEquals(0x46536000, (neg_smi - 0.5) << four); |
| 477 assertEquals(-0x73594000, (neg_smi - 0.5) << five); |
| 478 // End block A repeat 2 |
| 479 |
| 480 // Repeat previous block, with computed values in the shift variables. |
| 481 five = 0; |
| 482 while (five < 5 ) ++five; |
| 483 four = five - one; |
| 484 three = four - one; |
| 485 one = four - three; |
| 486 zero = one - one; |
| 487 |
| 488 // Begin block A repeat 3 |
| 489 assertEquals(pos_non_smi, (pos_non_smi) >> zero); |
| 490 assertEquals(pos_non_smi, (pos_non_smi) >>> zero); |
| 491 assertEquals(pos_non_smi, (pos_non_smi) << zero); |
| 492 assertEquals(neg_non_smi, (neg_non_smi) >> zero); |
| 493 assertEquals(neg_non_smi + 0x100000000, (neg_non_smi) >>> zero); |
| 494 assertEquals(neg_non_smi, (neg_non_smi) << zero); |
| 495 assertEquals(pos_smi, (pos_smi) >> zero); |
| 496 assertEquals(pos_smi, (pos_smi) >>> zero); |
| 497 assertEquals(pos_smi, (pos_smi) << zero); |
| 498 assertEquals(neg_smi, (neg_smi) >> zero); |
| 499 assertEquals(neg_smi + 0x100000000, (neg_smi) >>> zero); |
| 500 assertEquals(neg_smi, (neg_smi) << zero); |
| 501 |
| 502 assertEquals(pos_non_smi / 2, (pos_non_smi) >> one); |
| 503 assertEquals(pos_non_smi / 2, (pos_non_smi) >>> one); |
| 504 assertEquals(-0x1194D800, (pos_non_smi) << one); |
| 505 assertEquals(pos_non_smi / 8, (pos_non_smi) >> three); |
| 506 assertEquals(pos_non_smi / 8, (pos_non_smi) >>> three); |
| 507 assertEquals(-0x46536000, (pos_non_smi) << three); |
| 508 assertEquals(0x73594000, (pos_non_smi) << four); |
| 509 assertEquals(pos_non_smi, (pos_non_smi + 0.5) >> zero); |
| 510 assertEquals(pos_non_smi, (pos_non_smi + 0.5) >>> zero); |
| 511 assertEquals(pos_non_smi, (pos_non_smi + 0.5) << zero); |
| 512 assertEquals(pos_non_smi / 2, (pos_non_smi + 0.5) >> one); |
| 513 assertEquals(pos_non_smi / 2, (pos_non_smi + 0.5) >>> one); |
| 514 assertEquals(-0x1194D800, (pos_non_smi + 0.5) << one); |
| 515 assertEquals(pos_non_smi / 8, (pos_non_smi + 0.5) >> three); |
| 516 assertEquals(pos_non_smi / 8, (pos_non_smi + 0.5) >>> three); |
| 517 assertEquals(-0x46536000, (pos_non_smi + 0.5) << three); |
| 518 assertEquals(0x73594000, (pos_non_smi + 0.5) << four); |
| 519 |
| 520 assertEquals(neg_non_smi / 2, (neg_non_smi) >> one); |
| 521 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_non_smi) >>> one); |
| 522 assertEquals(0x1194D800, (neg_non_smi) << one); |
| 523 assertEquals(neg_non_smi / 8, (neg_non_smi) >> three); |
| 524 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_non_smi) >>> three); |
| 525 assertEquals(0x46536000, (neg_non_smi) << three); |
| 526 assertEquals(-0x73594000, (neg_non_smi) << four); |
| 527 assertEquals(neg_non_smi, (neg_non_smi - 0.5) >> zero); |
| 528 assertEquals(neg_non_smi + 0x100000000, (neg_non_smi - 0.5) >>> zero); |
| 529 assertEquals(neg_non_smi, (neg_non_smi - 0.5) << zero); |
| 530 assertEquals(neg_non_smi / 2, (neg_non_smi - 0.5) >> one); |
| 531 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_non_smi - 0.5) >>> one); |
| 532 assertEquals(0x1194D800, (neg_non_smi - 0.5) << one); |
| 533 assertEquals(neg_non_smi / 8, (neg_non_smi - 0.5) >> three); |
| 534 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_non_smi - 0.5) |
| 535 >>> three); |
| 536 assertEquals(0x46536000, (neg_non_smi - 0.5) << three); |
| 537 assertEquals(-0x73594000, (neg_non_smi - 0.5) << four); |
| 538 |
| 539 assertEquals(pos_smi / 2, (pos_smi) >> one); |
| 540 assertEquals(pos_smi / 2, (pos_smi) >>> one); |
| 541 assertEquals(pos_non_smi, (pos_smi) << one); |
| 542 assertEquals(pos_smi / 8, (pos_smi) >> three); |
| 543 assertEquals(pos_smi / 8, (pos_smi) >>> three); |
| 544 assertEquals(-0x2329b000, (pos_smi) << three); |
| 545 assertEquals(0x73594000, (pos_smi) << five); |
| 546 assertEquals(pos_smi, (pos_smi + 0.5) >> zero); |
| 547 assertEquals(pos_smi, (pos_smi + 0.5) >>> zero); |
| 548 assertEquals(pos_smi, (pos_smi + 0.5) << zero); |
| 549 assertEquals(pos_smi / 2, (pos_smi + 0.5) >> one); |
| 550 assertEquals(pos_smi / 2, (pos_smi + 0.5) >>> one); |
| 551 assertEquals(pos_non_smi, (pos_smi + 0.5) << one); |
| 552 assertEquals(pos_smi / 8, (pos_smi + 0.5) >> three); |
| 553 assertEquals(pos_smi / 8, (pos_smi + 0.5) >>> three); |
| 554 assertEquals(-0x2329b000, (pos_smi + 0.5) << three); |
| 555 assertEquals(0x73594000, (pos_smi + 0.5) << five); |
| 556 |
| 557 assertEquals(neg_smi / 2, (neg_smi) >> one); |
| 558 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_smi) >>> one); |
| 559 assertEquals(neg_non_smi, (neg_smi) << one); |
| 560 assertEquals(neg_smi / 8, (neg_smi) >> three); |
| 561 assertEquals(neg_smi / 8 + 0x100000000 / 8, (neg_smi) >>> three); |
| 562 assertEquals(0x46536000, (neg_smi) << four); |
| 563 assertEquals(-0x73594000, (neg_smi) << five); |
| 564 assertEquals(neg_smi, (neg_smi - 0.5) >> zero); |
| 565 assertEquals(neg_smi + 0x100000000, (neg_smi - 0.5) >>> zero); |
| 566 assertEquals(neg_smi, (neg_smi - 0.5) << zero); |
| 567 assertEquals(neg_smi / 2, (neg_smi - 0.5) >> one); |
| 568 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_smi - 0.5) >>> one); |
| 569 assertEquals(neg_non_smi, (neg_smi - 0.5) << one); |
| 570 assertEquals(neg_smi / 8, (neg_smi - 0.5) >> three); |
| 571 assertEquals(neg_smi / 8 + 0x100000000 / 8, (neg_smi - 0.5) >>> three); |
| 572 assertEquals(0x46536000, (neg_smi - 0.5) << four); |
| 573 assertEquals(-0x73594000, (neg_smi - 0.5) << five); |
| 574 // End block A repeat 3 |
| 575 |
| 576 // Test non-integer shift value |
| 577 assertEquals(5, 20.5 >> 2.4); |
| 578 assertEquals(5, 20.5 >> 2.7); |
| 579 var shift = 2.4; |
| 580 assertEquals(5, 20.5 >> shift); |
| 581 assertEquals(5, 20.5 >> shift + 0.3); |
| 582 shift = shift + zero; |
| 583 assertEquals(5, 20.5 >> shift); |
| 584 assertEquals(5, 20.5 >> shift + 0.3); |
| 585 } |
| 586 |
| 587 testShiftNonSmis(); |
OLD | NEW |