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)
301 lines
7.1 KiB
JavaScript
301 lines
7.1 KiB
JavaScript
"use strict"
|
|
|
|
|
|
function opaqueIdentity(arg) {
|
|
return arg;
|
|
}
|
|
noInline(opaqueIdentity)
|
|
function negateWithDoubleSub(arg) {
|
|
// Implement integer negate as a double sub operation.
|
|
return opaqueIdentity(6.4 - arg) - 6.4;
|
|
}
|
|
noInline(negateWithDoubleSub)
|
|
|
|
function opaqueNonZeroIntegerNegate(arg)
|
|
{
|
|
return -arg;
|
|
}
|
|
noInline(opaqueNonZeroIntegerNegate);
|
|
|
|
function testNonZeroInteger()
|
|
{
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if (opaqueNonZeroIntegerNegate(i) !== negateWithDoubleSub(i)) {
|
|
throw "Failed testNonZeroInteger() at i = " + i;
|
|
}
|
|
}
|
|
}
|
|
testNonZeroInteger();
|
|
|
|
|
|
function opaqueDoubleNegate(arg)
|
|
{
|
|
return -arg;
|
|
}
|
|
noInline(opaqueDoubleNegate);
|
|
|
|
function testDouble()
|
|
{
|
|
for (let i = 0; i < 1e4; ++i) {
|
|
if ((opaqueDoubleNegate(i + 0.5)) + 0.5 + i !== 0) {
|
|
throw "Failed testDouble() at i = " + i;
|
|
}
|
|
}
|
|
}
|
|
testDouble();
|
|
|
|
|
|
function opaqueObjectNegate(arg)
|
|
{
|
|
return -arg;
|
|
}
|
|
noInline(opaqueObjectNegate);
|
|
|
|
function testObject()
|
|
{
|
|
for (let i = 0; i < 1e4; ++i) {
|
|
if ((opaqueObjectNegate({ valueOf: ()=>{ return i + 0.5 }})) + 0.5 + i !== 0) {
|
|
throw "Failed testObject() at i = " + i;
|
|
}
|
|
}
|
|
}
|
|
testObject();
|
|
|
|
|
|
function opaqueIntegerAndDoubleNegate(arg)
|
|
{
|
|
return -arg;
|
|
}
|
|
noInline(opaqueIntegerAndDoubleNegate);
|
|
|
|
function testIntegerAndDouble()
|
|
{
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if ((opaqueIntegerAndDoubleNegate(i)) + i !== 0) {
|
|
throw "Failed testIntegerAndDouble() on integers at i = " + i;
|
|
}
|
|
if ((opaqueIntegerAndDoubleNegate(i + 0.5)) + 0.5 + i !== 0) {
|
|
throw "Failed testIntegerAndDouble() on double at i = " + i;
|
|
}
|
|
}
|
|
}
|
|
testIntegerAndDouble();
|
|
|
|
|
|
function opaqueIntegerThenDoubleNegate(arg)
|
|
{
|
|
return -arg;
|
|
}
|
|
noInline(opaqueIntegerThenDoubleNegate);
|
|
|
|
function testIntegerThenDouble()
|
|
{
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if ((opaqueIntegerThenDoubleNegate(i)) + i !== 0) {
|
|
throw "Failed testIntegerThenDouble() on integers at i = " + i;
|
|
}
|
|
}
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if ((opaqueIntegerThenDoubleNegate(i + 0.5)) + 0.5 + i !== 0) {
|
|
throw "Failed testIntegerThenDouble() on double at i = " + i;
|
|
}
|
|
}
|
|
}
|
|
testIntegerThenDouble();
|
|
|
|
|
|
function opaqueDoubleThenIntegerNegate(arg)
|
|
{
|
|
return -arg;
|
|
}
|
|
noInline(opaqueDoubleThenIntegerNegate);
|
|
|
|
function testDoubleThenInteger()
|
|
{
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if ((opaqueDoubleThenIntegerNegate(i + 0.5)) + 0.5 + i !== 0) {
|
|
throw "Failed testDoubleThenInteger() on double at i = " + i;
|
|
}
|
|
}
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if ((opaqueDoubleThenIntegerNegate(i)) + i !== 0) {
|
|
throw "Failed testDoubleThenInteger() on integers at i = " + i;
|
|
}
|
|
}
|
|
}
|
|
testDoubleThenInteger();
|
|
|
|
|
|
function opaqueIntegerAndObjectNegate(arg)
|
|
{
|
|
return -arg;
|
|
}
|
|
noInline(opaqueIntegerAndObjectNegate);
|
|
|
|
function testIntegerAndObject()
|
|
{
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if ((opaqueIntegerAndObjectNegate(i)) + i !== 0) {
|
|
throw "Failed testIntegerAndObject() on integers at i = " + i;
|
|
}
|
|
if ((opaqueIntegerAndObjectNegate({ valueOf: ()=>{ return i + 0.5 }})) + 0.5 + i !== 0) {
|
|
throw "Failed testIntegerAndObject() on double at i = " + i;
|
|
}
|
|
}
|
|
}
|
|
testIntegerAndObject();
|
|
|
|
|
|
function opaqueDoubleAndObjectNegate(arg)
|
|
{
|
|
return -arg;
|
|
}
|
|
noInline(opaqueDoubleAndObjectNegate);
|
|
|
|
function testDoubleAndObject()
|
|
{
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if ((opaqueDoubleAndObjectNegate(i + 0.5)) + i + 0.5 !== 0) {
|
|
throw "Failed testDoubleAndObject() on integers at i = " + i;
|
|
}
|
|
if ((opaqueDoubleAndObjectNegate({ valueOf: ()=>{ return i }})) + i !== 0) {
|
|
throw "Failed testDoubleAndObject() on double at i = " + i;
|
|
}
|
|
}
|
|
}
|
|
testDoubleAndObject();
|
|
|
|
|
|
function opaqueIntegerThenObjectNegate(arg)
|
|
{
|
|
return -arg;
|
|
}
|
|
noInline(opaqueIntegerThenObjectNegate);
|
|
|
|
function testIntegerThenObject()
|
|
{
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if ((opaqueIntegerThenObjectNegate(i)) + i !== 0) {
|
|
throw "Failed testIntegerThenObject() on integers at i = " + i;
|
|
}
|
|
}
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if ((opaqueIntegerThenObjectNegate({ valueOf: ()=>{ return i + 0.5 }})) + 0.5 + i !== 0) {
|
|
throw "Failed testIntegerThenObject() on double at i = " + i;
|
|
}
|
|
}
|
|
}
|
|
testIntegerThenObject();
|
|
|
|
|
|
function opaqueDoubleThenObjectNegate(arg)
|
|
{
|
|
return -arg;
|
|
}
|
|
noInline(opaqueDoubleThenObjectNegate);
|
|
|
|
function testDoubleThenObject()
|
|
{
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if ((opaqueDoubleThenObjectNegate(i + 0.5)) + i + 0.5 !== 0) {
|
|
throw "Failed testDoubleThenObject() on integers at i = " + i;
|
|
}
|
|
}
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if ((opaqueDoubleThenObjectNegate(i + 0.5)) + i + 0.5 !== 0) {
|
|
throw "Failed testDoubleThenObject() on integers at i = " + i;
|
|
}
|
|
}
|
|
}
|
|
testDoubleThenObject();
|
|
|
|
|
|
function opaqueIntegerAndDoubleAndObjectNegate(arg)
|
|
{
|
|
return -arg;
|
|
}
|
|
noInline(opaqueIntegerAndDoubleAndObjectNegate);
|
|
|
|
function testIntegerAndDoubleAndObject()
|
|
{
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if ((opaqueIntegerAndDoubleAndObjectNegate(i)) + i !== 0) {
|
|
throw "Failed testIntegerAndDoubleAndObject() on integers at i = " + i;
|
|
}
|
|
if ((opaqueIntegerAndDoubleAndObjectNegate(i + 0.5)) + i + 0.5 !== 0) {
|
|
throw "Failed testIntegerAndDoubleAndObject() on integers at i = " + i;
|
|
}
|
|
if ((opaqueIntegerAndDoubleAndObjectNegate({ valueOf: ()=>{ return i }})) + i !== 0) {
|
|
throw "Failed testIntegerAndDoubleAndObject() on double at i = " + i;
|
|
}
|
|
}
|
|
}
|
|
testIntegerAndDoubleAndObject();
|
|
|
|
|
|
function opaqueIntegerNegateOverflow(arg)
|
|
{
|
|
return -arg;
|
|
}
|
|
noInline(opaqueIntegerNegateOverflow);
|
|
|
|
function testIntegerNegateOverflow()
|
|
{
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if (opaqueIntegerNegateOverflow(0x80000000|0) !== 2147483648) {
|
|
throw "Failed opaqueIntegerNegateOverflow() at i = " + i;
|
|
}
|
|
}
|
|
}
|
|
testIntegerNegateOverflow();
|
|
|
|
|
|
function opaqueIntegerNegateZero(arg)
|
|
{
|
|
return -arg;
|
|
}
|
|
noInline(opaqueIntegerNegateZero);
|
|
|
|
function testIntegerNegateZero()
|
|
{
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if (1 / opaqueIntegerNegateZero(0) !== -Infinity) {
|
|
throw "Failed testIntegerNegateZero() at i = " + i;
|
|
}
|
|
}
|
|
}
|
|
testIntegerNegateZero();
|
|
|
|
|
|
function gatedNegate(selector, arg)
|
|
{
|
|
if (selector === 0) {
|
|
return -arg;
|
|
}
|
|
if (selector == 42) {
|
|
return -arg;
|
|
}
|
|
return arg;
|
|
}
|
|
noInline(gatedNegate);
|
|
|
|
function testUnusedNegate()
|
|
{
|
|
for (let i = 1; i < 1e2; ++i) {
|
|
if (gatedNegate(Math.PI, i) !== i) {
|
|
throw "Failed first phase of testUnusedNegate";
|
|
}
|
|
}
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if (gatedNegate(0, i) + i !== 0) {
|
|
throw "Failed second phase of testUnusedNegate";
|
|
}
|
|
}
|
|
for (let i = 1; i < 1e4; ++i) {
|
|
if (gatedNegate(42, i + 0.5) + 0.5 + i !== 0) {
|
|
throw "Failed third phase of testUnusedNegate";
|
|
}
|
|
}
|
|
}
|
|
testUnusedNegate();
|