| //------------------------------------------------------------------------------------------------------- |
| // Copyright (C) Microsoft. All rights reserved. |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. |
| //------------------------------------------------------------------------------------------------------- |
| |
| // No arguments |
| check(-Infinity, Math.max(), "max()"); |
| |
| // NaN |
| check(NaN, Math.max(NaN), "max(NaN)"); |
| |
| // Other non-numbers |
| check(NaN, Math.max({}), "max({})"); |
| check(NaN, Math.max({}, {}), "max({}, {})"); |
| check(NaN, Math.max({}, 42), "max({}, 42)"); |
| |
| // null |
| check(0, Math.max(null), "max(null)"); |
| |
| // +0 / -0 |
| check(0, Math.max(+0,-0), "max(+0,-0)"); |
| check(0, Math.max(-0,+0), "max(-0,+0)"); |
| check(0, Math.max(+0, -5, -0), "max(+0, -5, -0)"); |
| check(0, Math.max(-0, -5, +0), "max(-0, -5, +0)"); |
| |
| // Length property |
| check(2, Math.max.length, "max.length"); |
| |
| var values = [0, -0, -1, 1, -2, 2, 3.14159, 1000.123, 0x1fffffff, -0x20000000, Infinity, -Infinity]; |
| |
| for(var i=0; i < values.length; ++i) |
| { |
| // single value |
| check(values[i], Math.max(values[i]), "max(" + values[i] + ")"); |
| |
| // Infinity |
| check(Infinity, Math.max(values[i], Infinity), "max(" + values[i] + ", Infinity)"); |
| check(values[i], Math.max(values[i], -Infinity), "max(" + values[i] + ", -Infinity)"); |
| } |
| |
| // check max is the first/last value in the array |
| check(5, Math.max(5, 1, 2, 3, 4), "max is the first value"); |
| check(5, Math.max(4, 1, 2, 3, 5), "max is the last value"); |
| check(57000.4, Math.max(1.3, 1, 57000.4, 3, 4), "max is the first value"); |
| |
| // check max with 50 nearby double values |
| |
| check(3.0981503795899998000e+007, |
| Math.max( |
| 3.0981503795899998000e+007, |
| 3.0981503795899995000e+007, |
| 3.0981503795899991000e+007, |
| 3.0981503795899987000e+007, |
| 3.0981503795899983000e+007, |
| 3.0981503795899980000e+007, |
| 3.0981503795899976000e+007, |
| 3.0981503795899972000e+007, |
| 3.0981503795899969000e+007, |
| 3.0981503795899965000e+007, |
| 3.0981503795899961000e+007, |
| 3.0981503795899957000e+007, |
| 3.0981503795899954000e+007, |
| 3.0981503795899950000e+007, |
| 3.0981503795899946000e+007, |
| 3.0981503795899943000e+007, |
| 3.0981503795899939000e+007, |
| 3.0981503795899935000e+007, |
| 3.0981503795899931000e+007, |
| 3.0981503795899928000e+007, |
| 3.0981503795899924000e+007, |
| 3.0981503795899920000e+007, |
| 3.0981503795899916000e+007, |
| 3.0981503795899913000e+007, |
| 3.0981503795899909000e+007, |
| 3.0981503795899905000e+007, |
| 3.0981503795899902000e+007, |
| 3.0981503795899898000e+007, |
| 3.0981503795899894000e+007, |
| 3.0981503795899890000e+007, |
| 3.0981503795899887000e+007, |
| 3.0981503795899883000e+007, |
| 3.0981503795899879000e+007, |
| 3.0981503795899875000e+007, |
| 3.0981503795899872000e+007, |
| 3.0981503795899868000e+007, |
| 3.0981503795899864000e+007, |
| 3.0981503795899861000e+007, |
| 3.0981503795899857000e+007, |
| 3.0981503795899853000e+007, |
| 3.0981503795899849000e+007, |
| 3.0981503795899846000e+007, |
| 3.0981503795899842000e+007, |
| 3.0981503795899838000e+007, |
| 3.0981503795899834000e+007, |
| 3.0981503795899831000e+007, |
| 3.0981503795899827000e+007, |
| 3.0981503795899823000e+007, |
| 3.0981503795899820000e+007, |
| 3.0981503795899816000e+007 |
| ), "many values"); |
| |
| // special cases on -0.0, infinity, etc |
| |
| WScript.Echo(Number.POSITIVE_INFINITY); |
| WScript.Echo(Number.NEGATIVE_INFINITY); |
| var opD = +0.0; |
| var onD = -0.0; |
| var op = 1 / Number.POSITIVE_INFINITY |
| var on = 1 / Number.NEGATIVE_INFINITY; |
| var infp = 1 / op; |
| var infn = 1 / on; |
| var infpD = 1 / (+0.0); |
| var infnD = 1 / (-0.0); |
| WScript.Echo("opD = " + opD + " , onD = " + onD + " op = " + op + " , on = " + on + " , infp = " + infp + " , infn = " + infn + " , infpD = " + infpD + " , infnD = " + infnD); |
| |
| WScript.Echo("Math.max(+0.0, -0.0) " + Math.max(+0.0, -0.0)); |
| |
| if (1 / Math.max(+0.0, -0.0) < 0) { |
| WScript.Echo("Check (1 / Math.max(+0.0, -0.0) < 0) - true "); |
| } |
| else { |
| |
| WScript.Echo("Check (1 / Math.max(+0.0, -0.0) < 0) - false ") |
| } |
| |
| check(5, Math.max(5, Number.NEGATIVE_INFINITY), "max is not the negative infinity"); |
| check(Number.POSITIVE_INFINITY, Math.max(5, Number.POSITIVE_INFINITY), "max is the positive infinity"); |
| check(Number.POSITIVE_INFINITY, Math.max(Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY), "max is the positive infinity"); |
| |
| WScript.Echo("done"); |
| |
| function check(actual, expected, str) |
| { |
| if (isNaN(expected)) |
| { |
| if (actual.toString() !== expected.toString()) |
| { |
| WScript.Echo("fail: " + str); |
| } |
| } |
| else |
| { |
| if (actual !== expected) |
| { |
| WScript.Echo("fail: " + str); |
| } |
| } |
| } |
| |
| //negative zero |
| function foo(a,b) |
| { |
| var c = Math.max(a,b); |
| return 1/c; |
| } |
| WScript.Echo(foo(-0,0)); |
| WScript.Echo(foo(-0,0)); |
| WScript.Echo(foo(0,-0)); |
| WScript.Echo(foo(-0,-0)); |
| |
| function BLUE143505(a,b) |
| { |
| var c; |
| if ((Math.max(-4, undefined))) { |
| c = false; |
| } |
| return c; |
| }; |
| WScript.Echo(BLUE143505()); |
| WScript.Echo(BLUE143505()); |
| |
| function findMaxInArray() |
| { |
| var arr = new Array(3); |
| prop1 = 0; |
| arr[1] = 1; |
| arr[0] = 1; |
| WScript.Echo(Math.max.apply(Math, arr)); |
| Object.prototype[2] = prop1; |
| } |
| findMaxInArray(); |
| findMaxInArray(); |