// Copyright 2016 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Flags: --allow-natives-syntax function signInt32(i) { i = i|0; return Math.sign(i); } %PrepareFunctionForOptimization(signInt32); signInt32(0); signInt32(2); %OptimizeFunctionOnNextCall(signInt32); assertEquals(1, signInt32(1)); assertEquals(0, signInt32(0)); assertEquals(-1, signInt32(-1)); assertEquals(-1, signInt32(-1)); assertEquals(1, signInt32(2147483647)); assertEquals(-1, signInt32(2147483648)); assertEquals(-1, signInt32(-2147483648)); assertEquals(0, signInt32(NaN)); assertEquals(0, signInt32(undefined)); assertEquals(0, signInt32(-0)); function signFloat64(i) { return Math.sign(+i); } %PrepareFunctionForOptimization(signFloat64); signFloat64(0.1); signFloat64(-0.1); %OptimizeFunctionOnNextCall(signFloat64); assertEquals(1, signFloat64(1)); assertEquals(1, signFloat64(0.001)); assertEquals(-1, signFloat64(-0.002)); assertEquals(1, signFloat64(1e100)); assertEquals(-1, signFloat64(-2e100)); assertEquals(0, signFloat64(0)); assertEquals(Infinity, 1/signFloat64(0)); assertEquals(-1, signFloat64(-1)); assertEquals(-1, signFloat64(-1)); assertEquals(1, signFloat64(2147483647)); assertEquals(1, signFloat64(2147483648)); assertEquals(-1, signFloat64(-2147483647)); assertEquals(-1, signFloat64(-2147483648)); assertEquals(-1, signFloat64(-2147483649)); assertEquals(-0, signFloat64(-0)); assertEquals(NaN, signFloat64(NaN)); assertEquals(NaN, signFloat64(undefined)); assertEquals(1, signFloat64(Infinity)); assertEquals(-1, signFloat64(-Infinity));