blob: d67a1f99fb6e51e383366ecad02ff29723db8eaa [file] [log] [blame]
// 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();