mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 22:40:28 +02:00
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
287 lines
10 KiB
JavaScript
287 lines
10 KiB
JavaScript
function valuesAreClose(a, b) {
|
|
return Math.abs(a / b) - 1 < 1e-10;
|
|
}
|
|
|
|
// Some random values.
|
|
function mathPowDoubleDouble1(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleDouble1);
|
|
|
|
function mathPowDoubleInt1(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleInt1);
|
|
|
|
function test1(x, y, expected1, expected2) {
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleDouble1(x, y);
|
|
if (!valuesAreClose(result, expected1))
|
|
throw "Error: bad result, mathPowDoubleDouble1(" + x + ", " + y + ") = " + result + " expected a value close to " + expected1;
|
|
}
|
|
var integerY = y | 0;
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleInt1(x, integerY);
|
|
if (!valuesAreClose(result, expected2))
|
|
throw "Error: bad result, mathPowDoubleInt1(" + x + ", " + integerY + ") = " + result + " expected a value close to " + expected2;
|
|
}
|
|
}
|
|
noInline(test1);
|
|
test1(376.76522764377296, 10.81699226051569, 7.333951929109252e+27, 5.76378989575089e+25);
|
|
|
|
function mathPowDoubleDouble2(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleDouble2);
|
|
|
|
function mathPowDoubleInt2(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleInt2);
|
|
function test2(x, y, expected1, expected2) {
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleDouble2(x, y);
|
|
if (!valuesAreClose(result, expected1))
|
|
throw "Error: bad result, mathPowDoubleDouble2(" + x + ", " + y + ") = " + result + " expected a value close to " + expected1;
|
|
}
|
|
var integerY = y | 0;
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleInt2(x, integerY);
|
|
if (!valuesAreClose(result, expected2))
|
|
throw "Error: bad result, mathPowDoubleInt2(" + x + ", " + integerY + ") = " + result + " expected a value close to " + expected2;
|
|
}
|
|
}
|
|
noInline(test2);
|
|
test2(376.76522764377296, -5.81699226051569, 1.035180331187579e-15, 1.3171824310400265e-13);
|
|
|
|
function mathPowDoubleDouble3(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleDouble3);
|
|
|
|
function mathPowDoubleInt3(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleInt3);
|
|
function test3(x, y, expected1, expected2) {
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleDouble3(x, y);
|
|
if (!valuesAreClose(result, expected1))
|
|
throw "Error: bad result, mathPowDoubleDouble3(" + x + ", " + y + ") = " + result + " expected a value close to " + expected1;
|
|
}
|
|
var integerY = y | 0;
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleInt3(x, integerY);
|
|
if (!valuesAreClose(result, expected2))
|
|
throw "Error: bad result, mathPowDoubleInt3(" + x + ", " + integerY + ") = " + result + " expected a value close to " + expected2;
|
|
}
|
|
}
|
|
noInline(test3);
|
|
test3(-37.676522764377296, 10.0, 5763789895750892, 5763789895750892);
|
|
|
|
// Exponent zero.
|
|
function mathPowDoubleDouble4(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleDouble4);
|
|
|
|
function mathPowDoubleInt4(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleInt4);
|
|
function test4(x, y, expected1, expected2) {
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleDouble4(x, y);
|
|
if (!valuesAreClose(result, expected1))
|
|
throw "Error: bad result, mathPowDoubleDouble4(" + x + ", " + y + ") = " + result + " expected a value close to " + expected1;
|
|
}
|
|
var integerY = y | 0;
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleInt4(x, integerY);
|
|
if (!valuesAreClose(result, expected2))
|
|
throw "Error: bad result, mathPowDoubleInt4(" + x + ", " + integerY + ") = " + result + " expected a value close to " + expected2;
|
|
}
|
|
}
|
|
noInline(test4);
|
|
test4(-37.676522764377296, 0, 1, 1);
|
|
|
|
// Exponent minus zero.
|
|
function mathPowDoubleDouble5(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleDouble5);
|
|
|
|
function mathPowDoubleInt5(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleInt5);
|
|
function test5(x, y, expected1, expected2) {
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleDouble5(x, y);
|
|
if (!valuesAreClose(result, expected1))
|
|
throw "Error: bad result, mathPowDoubleDouble5(" + x + ", " + y + ") = " + result + " expected a value close to " + expected1;
|
|
}
|
|
var integerY = y | 0;
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleInt5(x, integerY);
|
|
if (!valuesAreClose(result, expected2))
|
|
throw "Error: bad result, mathPowDoubleInt(" + x + ", " + integerY + ") = " + result + " expected a value close to " + expected2;
|
|
}
|
|
}
|
|
noInline(test5);
|
|
test5(-37.676522764377296, -0, 1, 1);
|
|
|
|
// Exponent 1.
|
|
function mathPowDoubleDouble6(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleDouble6);
|
|
|
|
function mathPowDoubleInt6(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleInt6);
|
|
function test6(x, y, expected1, expected2) {
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleDouble6(x, y);
|
|
if (!valuesAreClose(result, expected1))
|
|
throw "Error: bad result, mathPowDoubleDouble6(" + x + ", " + y + ") = " + result + " expected a value close to " + expected1;
|
|
}
|
|
var integerY = y | 0;
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleInt6(x, integerY);
|
|
if (!valuesAreClose(result, expected2))
|
|
throw "Error: bad result, mathPowDoubleInt6(" + x + ", " + integerY + ") = " + result + " expected a value close to " + expected2;
|
|
}
|
|
}
|
|
noInline(test6);
|
|
test6(-37.676522764377296, 1.0, -37.676522764377296, -37.676522764377296);
|
|
|
|
// Exponent -1.
|
|
function mathPowDoubleDouble7(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleDouble7);
|
|
|
|
function mathPowDoubleInt7(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleInt7);
|
|
function test7(x, y, expected1, expected2) {
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleDouble7(x, y);
|
|
if (!valuesAreClose(result, expected1))
|
|
throw "Error: bad result, mathPowDoubleDouble7(" + x + ", " + y + ") = " + result + " expected a value close to " + expected1;
|
|
}
|
|
var integerY = y | 0;
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleDouble7(x, integerY);
|
|
if (!valuesAreClose(result, expected2))
|
|
throw "Error: bad result, mathPowDoubleDouble7(" + x + ", " + integerY + ") = " + result + " expected a value close to " + expected2;
|
|
}
|
|
}
|
|
noInline(test7);
|
|
test7(-37.676522764377296, -1.0, -0.026541727490454296, -0.026541727490454296);
|
|
|
|
// Let's square things.
|
|
function mathPowDoubleDouble8(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleDouble8);
|
|
|
|
function mathPowDoubleInt8(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleInt8);
|
|
function test8(x, y, expected1, expected2) {
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleDouble8(x, y);
|
|
if (!valuesAreClose(result, expected1))
|
|
throw "Error: bad result, mathPowDoubleDouble8(" + x + ", " + y + ") = " + result + " expected a value close to " + expected1;
|
|
}
|
|
var integerY = y | 0;
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleInt8(x, integerY);
|
|
if (!valuesAreClose(result, expected2))
|
|
throw "Error: bad result, mathPowDoubleInt8(" + x + ", " + integerY + ") = " + result + " expected a value close to " + expected2;
|
|
}
|
|
}
|
|
noInline(test8);
|
|
test8(-37.676522764377296, 2.0, 1419.5203676146407, 1419.5203676146407);
|
|
|
|
function mathPowDoubleDouble9(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleDouble9);
|
|
|
|
function mathPowDoubleInt9(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleInt9);
|
|
function test9(x, y, expected1, expected2) {
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleDouble9(x, y);
|
|
if (!valuesAreClose(result, expected1))
|
|
throw "Error: bad result, mathPowDoubleDouble9(" + x + ", " + y + ") = " + result + " expected a value close to " + expected1;
|
|
}
|
|
var integerY = y | 0;
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleInt9(x, integerY);
|
|
if (!valuesAreClose(result, expected2))
|
|
throw "Error: bad result, mathPowDoubleInt9(" + x + ", " + integerY + ") = " + result + " expected a value close to " + expected2;
|
|
}
|
|
}
|
|
noInline(test9);
|
|
test9(37.676522764377296, 2.0, 1419.5203676146407, 1419.5203676146407);
|
|
|
|
// Let's cube things.
|
|
function mathPowDoubleDouble10(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleDouble10);
|
|
|
|
function mathPowDoubleInt10(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleInt10);
|
|
function test10(x, y, expected1, expected2) {
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleDouble10(x, y);
|
|
if (!valuesAreClose(result, expected1))
|
|
throw "Error: bad result, mathPowDoubleDouble(" + x + ", " + y + ") = " + result + " expected a value close to " + expected1;
|
|
}
|
|
var integerY = y | 0;
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleInt10(x, integerY);
|
|
if (!valuesAreClose(result, expected2))
|
|
throw "Error: bad result, mathPowDoubleInt(" + x + ", " + integerY + ") = " + result + " expected a value close to " + expected2;
|
|
}
|
|
}
|
|
noInline(test10);
|
|
test10(-37.676522764377296, 3.0, -53482.591444930236, -53482.591444930236);
|
|
|
|
function mathPowDoubleDouble11(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleDouble11);
|
|
|
|
function mathPowDoubleInt11(x, y) {
|
|
return Math.pow(x, y)
|
|
}
|
|
noInline(mathPowDoubleInt11);
|
|
function test11(x, y, expected1, expected2) {
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleDouble11(x, y);
|
|
if (!valuesAreClose(result, expected1))
|
|
throw "Error: bad result, mathPowDoubleDouble(" + x + ", " + y + ") = " + result + " expected a value close to " + expected1;
|
|
}
|
|
var integerY = y | 0;
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var result = mathPowDoubleInt11(x, integerY);
|
|
if (!valuesAreClose(result, expected2))
|
|
throw "Error: bad result, mathPowDoubleInt(" + x + ", " + integerY + ") = " + result + " expected a value close to " + expected2;
|
|
}
|
|
}
|
|
noInline(test11);
|
|
test11(37.676522764377296, 3.0, 53482.591444930236, 53482.591444930236);
|