1402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// Copyright 2010 the V8 project authors. All rights reserved. 2402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// Redistribution and use in source and binary forms, with or without 3402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// modification, are permitted provided that the following conditions are 4402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// met: 5402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// 6402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// * Redistributions of source code must retain the above copyright 7402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// notice, this list of conditions and the following disclaimer. 8402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// * Redistributions in binary form must reproduce the above 9402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// copyright notice, this list of conditions and the following 10402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// disclaimer in the documentation and/or other materials provided 11402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// with the distribution. 12402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// * Neither the name of Google Inc. nor the names of its 13402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// contributors may be used to endorse or promote products derived 14402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// from this software without specific prior written permission. 15402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// 16402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu 286ded16be15dd865a9b21ea304d5273c8be299c87Steve Block// Test postfix count operations with smis. 296ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 306ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockfunction f1() { var x = 0x3fffffff; x++; return x; } 316ded16be15dd865a9b21ea304d5273c8be299c87Steve BlockassertEquals(0x40000000, f1()); 326ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 336ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 346ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockfunction f2() { var x = -0x40000000; x--; return x; } 356ded16be15dd865a9b21ea304d5273c8be299c87Steve BlockassertEquals(-0x40000001, f2()); 366ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 376ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 386ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockfunction f3(x) { x = x & 0x3fffffff; x++; return x; } 396ded16be15dd865a9b21ea304d5273c8be299c87Steve BlockassertEquals(0x40000000, f3(0x3fffffff)); 406ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 416ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 426ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockfunction f4() { 436ded16be15dd865a9b21ea304d5273c8be299c87Steve Block var i; 446ded16be15dd865a9b21ea304d5273c8be299c87Steve Block for (i = 0x3ffffffe; i <= 0x3fffffff; i++) {} 456ded16be15dd865a9b21ea304d5273c8be299c87Steve Block return i; 466ded16be15dd865a9b21ea304d5273c8be299c87Steve Block} 476ded16be15dd865a9b21ea304d5273c8be299c87Steve BlockassertEquals(0x40000000, f4()); 486ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 496ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 506ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockfunction f5() { 516ded16be15dd865a9b21ea304d5273c8be299c87Steve Block var i; 526ded16be15dd865a9b21ea304d5273c8be299c87Steve Block for (i = -0x3fffffff; i >= -0x40000000; i--) {} 536ded16be15dd865a9b21ea304d5273c8be299c87Steve Block return i; 546ded16be15dd865a9b21ea304d5273c8be299c87Steve Block} 556ded16be15dd865a9b21ea304d5273c8be299c87Steve BlockassertEquals(-0x40000001, f5()); 566ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 576ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 586ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockfunction f6() { var x = 0x3fffffff; x++; return x+1; } 596ded16be15dd865a9b21ea304d5273c8be299c87Steve BlockassertEquals(0x40000001, f6()); 606ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 616ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 626ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockfunction f7() { 636ded16be15dd865a9b21ea304d5273c8be299c87Steve Block var i; 646ded16be15dd865a9b21ea304d5273c8be299c87Steve Block for (i = 0x3ffffffd; i <= 0x3ffffffe; i++) {} 656ded16be15dd865a9b21ea304d5273c8be299c87Steve Block i++; i = i + 1; 666ded16be15dd865a9b21ea304d5273c8be299c87Steve Block return i; 676ded16be15dd865a9b21ea304d5273c8be299c87Steve Block} 686ded16be15dd865a9b21ea304d5273c8be299c87Steve BlockassertEquals(0x40000001, f7()); 696ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 706ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 716ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockfunction f8() { 726ded16be15dd865a9b21ea304d5273c8be299c87Steve Block var i; 736ded16be15dd865a9b21ea304d5273c8be299c87Steve Block for (i = 0x3ffffffd; i <= 0x3fffffff; i++) {} 746ded16be15dd865a9b21ea304d5273c8be299c87Steve Block i++; i++; 756ded16be15dd865a9b21ea304d5273c8be299c87Steve Block return i; 766ded16be15dd865a9b21ea304d5273c8be299c87Steve Block} 776ded16be15dd865a9b21ea304d5273c8be299c87Steve BlockassertEquals(0x40000002, f8()); 78402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu 79402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu 806ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockfunction f9() { 816ded16be15dd865a9b21ea304d5273c8be299c87Steve Block var i; 826ded16be15dd865a9b21ea304d5273c8be299c87Steve Block for (i = 0; i < 42; i++) { 836ded16be15dd865a9b21ea304d5273c8be299c87Steve Block return 42; 84402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu } 856ded16be15dd865a9b21ea304d5273c8be299c87Steve Block} 866ded16be15dd865a9b21ea304d5273c8be299c87Steve BlockassertEquals(42, f9()); 87402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu 88402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu 896ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockfunction f10(x) { 906ded16be15dd865a9b21ea304d5273c8be299c87Steve Block for (x = 0; x < 4; x++) {} 916ded16be15dd865a9b21ea304d5273c8be299c87Steve Block} 926ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockf10(42); 93