12e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// Copyright 2013 the V8 project authors. All rights reserved. 22e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// Redistribution and use in source and binary forms, with or without 32e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// modification, are permitted provided that the following conditions are 42e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// met: 52e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// 62e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// * Redistributions of source code must retain the above copyright 72e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// notice, this list of conditions and the following disclaimer. 82e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// * Redistributions in binary form must reproduce the above 92e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// copyright notice, this list of conditions and the following 102e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// disclaimer in the documentation and/or other materials provided 112e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// with the distribution. 122e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// * Neither the name of Google Inc. nor the names of its 132e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// contributors may be used to endorse or promote products derived 142e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// from this software without specific prior written permission. 152e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// 162e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 282e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 292e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org// Flags: --nodead-code-elimination --fold-constants --allow-natives-syntax 302e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 312e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgfunction test(f) { 322e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org f(); 332e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org f(); 342e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org %OptimizeFunctionOnNextCall(f); 352e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org f(); 362e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org // Assert that there has been no deopt. 37ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org assertOptimized(f); 382e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org} 392e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 402e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function add() { 412e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(2, 1 + 1); 422e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(2.5, 1.25 + 1.25); 432e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Infinity + Infinity)); 442e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Infinity + 3)); 452e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Infinity + (-Infinity))); 462e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(NaN + 2)); 472e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(1 / (-0.0 + (-0.0)))); 482e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(1 / (-0.0 + 0.0))); 492e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 502e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 512e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function inc() { 522e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org var a = 1; 532e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org var b = Infinity; 542e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org var c = -Infinity; 552e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org var d = NaN; 562e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(2, ++a); 572e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(++b)); 582e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(++c)); 592e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(++d)); 602e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 612e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 622e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function dec() { 632e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org var a = 1; 642e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org var b = Infinity; 652e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org var c = -Infinity; 662e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org var d = NaN; 672e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(0, --a); 682e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(--b)); 692e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(--c)); 702e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(--d)); 712e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 722e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 732e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function sub() { 742e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(0, 1 - 1); 752e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(0.5, 1.5 - 1); 762e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Infinity - (-Infinity))); 772e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Infinity - 3)); 782e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Infinity - Infinity)); 792e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(NaN - 2)); 802e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(1 / (-0.0 - 0.0))); 812e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(1 / (0.0 - 0.0))); 822e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 832e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 842e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function mul() { 852e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(1, 1 * 1); 862e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(2.25, 1.5 * 1.5); 872e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Infinity * Infinity)); 882e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(Infinity * (-Infinity))); 892e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Infinity * 3)); 902e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(Infinity * (-3))); 912e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(NaN * 3)); 922e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(1 / (-0.0 * 0.0))); 932e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(1 / (0.0 * 0.0))); 942e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 952e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 962e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function div() { 972e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(1, 1 / 1); 982e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(1.5, 2.25 / 1.5); 992e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Infinity / Infinity)); 1002e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Infinity / 3)); 1012e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(Infinity / (-3))); 1022e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(NaN / 3)); 1032e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(1 / (-0.0))); 1042e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Infinity/0.0)); 1052e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 1062e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 1072e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function mathMin() { 1082e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(1, Math.min(1, 10)); 1092e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(1.5, Math.min(1.5, 2.5)); 1102e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(0, Math.min(Infinity, 0)); 1112e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Math.min(Infinity, Infinity))); 1122e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(Math.min(Infinity, -Infinity))); 1132e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.min(NaN, 1))); 1142e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(1 / Math.min(0.0, 0.0))); 1152e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(1 / Math.min(-0.0, -0.0))); 1162e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(1 / Math.min(0.0, -0.0))); 1172e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 1182e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 1192e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function mathMax() { 1202e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(10, Math.max(1, 10)); 1212e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(2.5, Math.max(1.5, 2.5)); 1222e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(Infinity, Math.max(Infinity, 0)); 1232e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(Math.max(-Infinity, -Infinity))); 1242e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Math.max(Infinity, -Infinity))); 1252e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.max(NaN, 1))); 1262e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(1 / Math.max(0.0, 0.0))); 1272e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(1 / Math.max(-0.0, -0.0))); 1282e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(1 / Math.max(0.0, -0.0))); 1292e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 1302e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 1312e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function mathExp() { 1322e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(1.0, Math.exp(0.0)); 1332e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertTrue(2.7 < Math.exp(1) && Math.exp(1) < 2.8); 1342e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Math.exp(Infinity))); 1352e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("0", String(Math.exp(-Infinity))); 1362e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.exp(NaN))); 1372e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 1382e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 1392e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function mathLog() { 1402e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(0.0, Math.log(1.0)); 1412e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertTrue(1 < Math.log(3) && Math.log(3) < 1.5); 1422e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Math.log(Infinity))); 1432e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.log(-Infinity))); 1442e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.exp(NaN))); 1452e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 1462e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 1472e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function mathSqrt() { 1482e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(1.0, Math.sqrt(1.0)); 1492e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.sqrt(-1.0))); 1502e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Math.sqrt(Infinity))); 1512e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.sqrt(-Infinity))); 1522e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.sqrt(NaN))); 1532e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 1542e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 1552e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function mathPowHalf() { 1562e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(1.0, Math.pow(1.0, 0.5)); 1572e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.sqrt(-1.0))); 1582e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Math.pow(Infinity, 0.5))); 1592e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.sqrt(-Infinity, 0.5))); 1602e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(0, Math.pow(Infinity, -0.5)); 1612e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.sqrt(-Infinity, -0.5))); 1622e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.sqrt(NaN, 0.5))); 1632e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 1642e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 1652e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function mathAbs() { 1662e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(1.5, Math.abs(1.5)); 1672e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(1.5, Math.abs(-1.5)); 1682e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Math.abs(Infinity))); 1692e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Math.abs(-Infinity))); 1702e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.abs(NaN))); 1712e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 1722e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 1732e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function mathRound() { 1742e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(2, Math.round(1.5)); 1752e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(-1, Math.round(-1.5)); 1762e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Math.round(Infinity))); 1772e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(Math.round(-Infinity))); 1782e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(1 / Math.round(0.0))); 1792e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(1 / Math.round(-0.0))); 1802e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.round(NaN))); 1812e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(Math.pow(2, 52) + 1, Math.round(Math.pow(2, 52) + 1)); 1822e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 1832e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 184dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.orgtest(function mathFround() { 185dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org assertTrue(isNaN(Math.fround(NaN))); 186dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org assertEquals("Infinity", String(1/Math.fround(0))); 187dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org assertEquals("-Infinity", String(1/Math.fround(-0))); 188dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org assertEquals("Infinity", String(Math.fround(Infinity))); 189dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org assertEquals("-Infinity", String(Math.fround(-Infinity))); 190dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org assertEquals("Infinity", String(Math.fround(1E200))); 191dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org assertEquals("-Infinity", String(Math.fround(-1E200))); 192dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org assertEquals(3.1415927410125732, Math.fround(Math.PI)); 193dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org}); 194dc207d99f9dbff76065405b65f3d88e1fb49fc1cmachenbach@chromium.org 1952e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function mathFloor() { 1962e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(1, Math.floor(1.5)); 1972e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(-2, Math.floor(-1.5)); 1982e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Math.floor(Infinity))); 1992e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(Math.floor(-Infinity))); 2002e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(1 / Math.floor(0.0))); 2012e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("-Infinity", String(1 / Math.floor(-0.0))); 2022e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.floor(NaN))); 2032e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(Math.pow(2, 52) + 1, Math.floor(Math.pow(2, 52) + 1)); 2042e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 2052e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 2062e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function mathPow() { 2072e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(2.25, Math.pow(1.5, 2)); 2082e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertTrue(1.8 < Math.pow(1.5, 1.5) && Math.pow(1.5, 1.5) < 1.9); 2092e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Math.pow(Infinity, 0.5))); 2102e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Math.pow(-Infinity, 0.5))); 2112e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(0, Math.pow(Infinity, -0.5)); 2122e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(0, Math.pow(Infinity, -0.5)); 2132e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("Infinity", String(Math.pow(Infinity, Infinity))); 2142e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(0, Math.pow(Infinity, -Infinity)); 2152e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.pow(Infinity, NaN))); 2162e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String(Math.pow(NaN, 2))); 2172e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 2182e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 2192e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function stringAdd() { 2202e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("", "" + ""); 2212e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("folded constant", "folded " + "constant"); 2222e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("not folded constant1", "not folded constant" + 1); 2232e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 2242e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 2252e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function stringLength() { 2262e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(6, "abcdef".length); 2272e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(0, "".length); 2282e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(-5, { length: -5 }.length); 2292e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 2302e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 2312e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function stringCharCodeAt() { 2322e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(99, "abc".charCodeAt(2)); 2332e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String("abc".charCodeAt(-1))); 2342e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String("abc".charCodeAt(4))); 2352e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals(98, "abc".charCodeAt(1.1)); 2362e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("NaN", String("abc".charCodeAt(4.1))); 2372e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 2382e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 2392e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgtest(function stringCharAt() { 2402e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("c", "abc".charAt(2)); 2412e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("", "abc".charAt(-1)); 2422e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("", "abc".charAt(4)); 2432e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("b", "abc".charAt(1.1)); 2442e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org assertEquals("", "abc".charAt(4.1)); 2452e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}); 246906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org 247906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org 248906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.orgtest(function int32Mod() { 249906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org assertEquals(-0, -2147483648 % (-1)); 250906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org}); 251906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org 252906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.orgtest(function int32Div() { 253906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org assertEquals(2147483648, -2147483648 / (-1)); 254906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org}); 255