| // 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)); |