// If an argument is NaN, the result of Math.pow(x, y) is NaN. function testIntegerBaseWithNaNExponentStatic() { for (var i = 0; i < 10000; ++i) { var result = Math.pow(5, NaN); if (!isNaN(result)) throw "Error: bad result, Math.pow(5, NaN) = " + result; } for (var i = 0; i < 10000; ++i) { var result = Math.pow(i, NaN); if (!isNaN(result)) throw "Error: bad result, Math.pow(i, NaN) = " + result + " with i = " + i; } } noInline(testIntegerBaseWithNaNExponentStatic); testIntegerBaseWithNaNExponentStatic(); function mathPowIntegerBaseWithNaNExponentDynamic(x, y) { return Math.pow(x, y); } noInline(mathPowIntegerBaseWithNaNExponentDynamic); function testIntegerBaseWithNaNExponentDynamic() { // Warm up with 2 integers. for (var i = 0; i < 10000; ++i) { var result = mathPowIntegerBaseWithNaNExponentDynamic(2, 5); if (result !== 32) throw "Error: bad result, mathPowIntegerBaseWithNaNExponentDynamic(2, 5) = " + result + ", expected 32." } for (var i = 0; i < 10000; ++i) { var result = mathPowIntegerBaseWithNaNExponentDynamic(i, NaN); if (!isNaN(result)) throw "Error: bad result, mathPowIntegerBaseWithNaNExponentDynamic(i, NaN) = " + result + " with i = " + i + ", expected NaN"; } } noInline(testIntegerBaseWithNaNExponentDynamic); testIntegerBaseWithNaNExponentDynamic(); function testFloatingPointBaseWithNaNExponentStatic() { for (var i = 0; i < 10000; ++i) { var result = Math.pow(5.5, NaN); if (!isNaN(result)) throw "Error: bad result, Math.pow(5.5, NaN) = " + result; } for (var i = 0; i < 10000; ++i) { var result = Math.pow(i + 0.5, NaN); if (!isNaN(result)) throw "Error: bad result, Math.pow(i + 0.5, NaN) = " + result + " with i = " + i; } } noInline(testFloatingPointBaseWithNaNExponentStatic); testFloatingPointBaseWithNaNExponentStatic(); function mathPowFloatingPointBaseWithNaNExponentDynamic(x, y) { return Math.pow(x, y); } noInline(mathPowFloatingPointBaseWithNaNExponentDynamic); function testFloatingPointBaseWithNaNExponentDynamic() { // Warm up with 2 double. for (var i = 0; i < 10000; ++i) { var result = mathPowFloatingPointBaseWithNaNExponentDynamic(2.5, 5.1); if (result !== 107.02717054543135) throw "Error: bad result, mathPowFloatingPointBaseWithNaNExponentDynamic(2.5, 5.1) = " + result + ", expected 107.02717054543135." } for (var i = 0; i < 10000; ++i) { var result = mathPowFloatingPointBaseWithNaNExponentDynamic(i + 0.5, NaN); if (!isNaN(result)) throw "Error: bad result, mathPowFloatingPointBaseWithNaNExponentDynamic(i + 0.5, NaN) = " + result + " with i = " + i + ", expected NaN"; } } noInline(testFloatingPointBaseWithNaNExponentDynamic); testFloatingPointBaseWithNaNExponentDynamic(); // If y is +0, the result is 1, even if x is NaN. // If y is -0, the result is 1, even if x is NaN. // If x is NaN and y is nonzero, the result is NaN. function testNaNBaseStatic() { for (var i = 0; i < 10000; ++i) { var result = Math.pow(NaN, i + 1); if (!isNaN(result)) throw "Error: bad result, Math.pow(NaN, i + 1) = " + result + " with i = " + i; } for (var i = 0; i < 10000; ++i) { var result = Math.pow(NaN, i + 1.5); if (!isNaN(result)) throw "Error: bad result, Math.pow(NaN, i + 1.5) = " + result + " with i = " + i; } for (var i = 0; i < 10000; ++i) { var result = Math.pow(NaN, 0); if (result !== 1) throw "Error: bad result, Math.pow(NaN, 0) = " + result; } for (var i = 0; i < 10000; ++i) { var result = Math.pow(NaN, -0); if (result !== 1) throw "Error: bad result, Math.pow(NaN, -0) = " + result; } } noInline(testNaNBaseStatic); testNaNBaseStatic(); function mathPowNaNBaseDynamic1(x, y) { return Math.pow(x, y); } function mathPowNaNBaseDynamic2(x, y) { return Math.pow(x, y); } function mathPowNaNBaseDynamic3(x, y) { return Math.pow(x, y); } function mathPowNaNBaseDynamic4(x, y) { return Math.pow(x, y); } noInline(mathPowNaNBaseDynamic1); noInline(mathPowNaNBaseDynamic2); noInline(mathPowNaNBaseDynamic3); noInline(mathPowNaNBaseDynamic4); function testNaNBaseDynamic() { for (var i = 0; i < 10000; ++i) { var result = mathPowNaNBaseDynamic1(NaN, i + 1); if (!isNaN(result)) throw "Error: bad result, mathPowNaNBaseDynamic1(NaN, i + 1) = " + result + " with i = " + i; } for (var i = 0; i < 10000; ++i) { var result = mathPowNaNBaseDynamic2(NaN, i + 1.5); if (!isNaN(result)) throw "Error: bad result, mathPowNaNBaseDynamic2(NaN, i + 1.5) = " + result + " with i = " + i; } for (var i = 0; i < 10000; ++i) { var result = mathPowNaNBaseDynamic3(NaN, 0); if (result !== 1) throw "Error: bad result, mathPowNaNBaseDynamic3(NaN, 0) = " + result; } for (var i = 0; i < 10000; ++i) { var result = mathPowNaNBaseDynamic4(NaN, -0); if (result !== 1) throw "Error: bad result, mathPowNaNBaseDynamic4(NaN, -0) = " + result; } } noInline(testNaNBaseDynamic); testNaNBaseDynamic(); // If abs(x) is 1 and y is +Inf the result is NaN. // If abs(x) is 1 and y is −Inf the result is NaN. function infiniteExponentsStatic() { for (var i = 0; i < 10000; ++i) { var result = Math.pow(1, Number.POSITIVE_INFINITY); if (!isNaN(result)) throw "Error: bad result, Math.pow(1, Number.POSITIVE_INFINITY) = " + result; } for (var i = 0; i < 10000; ++i) { var result = Math.pow(-1, Number.POSITIVE_INFINITY); if (!isNaN(result)) throw "Error: bad result, Math.pow(-1, Number.POSITIVE_INFINITY) = " + result; } for (var i = 0; i < 10000; ++i) { var result = Math.pow(1, Number.NEGATIVE_INFINITY); if (!isNaN(result)) throw "Error: bad result, Math.pow(1, Number.NEGATIVE_INFINITY) = " + result; } for (var i = 0; i < 10000; ++i) { var result = Math.pow(-1, Number.NEGATIVE_INFINITY); if (!isNaN(result)) throw "Error: bad result, Math.pow(-1, Number.NEGATIVE_INFINITY) = " + result; } } noInline(infiniteExponentsStatic); infiniteExponentsStatic(); function mathPowInfiniteExponentsDynamic1(x, y) { return Math.pow(x, y); } function mathPowInfiniteExponentsDynamic2(x, y) { return Math.pow(x, y); } function mathPowInfiniteExponentsDynamic3(x, y) { return Math.pow(x, y); } function mathPowInfiniteExponentsDynamic4(x, y) { return Math.pow(x, y); } noInline(mathPowInfiniteExponentsDynamic1); noInline(mathPowInfiniteExponentsDynamic2); noInline(mathPowInfiniteExponentsDynamic3); noInline(mathPowInfiniteExponentsDynamic4); function infiniteExponentsDynamic() { for (var i = 0; i < 10000; ++i) { var result = mathPowInfiniteExponentsDynamic1(1, Number.POSITIVE_INFINITY); if (!isNaN(result)) throw "Error: bad result, mathPowInfiniteExponentsDynamic1(1, Number.POSITIVE_INFINITY) = " + result; } for (var i = 0; i < 10000; ++i) { var result = mathPowInfiniteExponentsDynamic2(-1, Number.POSITIVE_INFINITY); if (!isNaN(result)) throw "Error: bad result, mathPowInfiniteExponentsDynamic2(-1, Number.POSITIVE_INFINITY) = " + result; } for (var i = 0; i < 10000; ++i) { var result = mathPowInfiniteExponentsDynamic3(1, Number.NEGATIVE_INFINITY); if (!isNaN(result)) throw "Error: bad result, mathPowInfiniteExponentsDynamic3(1, Number.NEGATIVE_INFINITY) = " + result; } for (var i = 0; i < 10000; ++i) { var result = mathPowInfiniteExponentsDynamic4(-1, Number.NEGATIVE_INFINITY); if (!isNaN(result)) throw "Error: bad result, mathPowInfiniteExponentsDynamic4(-1, Number.NEGATIVE_INFINITY) = " + result; } } noInline(infiniteExponentsDynamic); infiniteExponentsDynamic();