mirror of https://github.com/tc39/test262.git
200 lines
4.8 KiB
JavaScript
200 lines
4.8 KiB
JavaScript
function shouldThrowSyntaxError(script) {
|
|
let error;
|
|
try {
|
|
eval(script);
|
|
} catch (e) {
|
|
error = e;
|
|
}
|
|
|
|
if (!(error instanceof SyntaxError))
|
|
throw new Error('Expected SyntaxError!');
|
|
}
|
|
|
|
(function() {
|
|
// Iterate over an array with normal indexed properties.
|
|
var foo = function() {
|
|
var a = [1, 2, 3, 4, 5];
|
|
var sum = 0;
|
|
var result = "";
|
|
for (var p in a)
|
|
result += a[p];
|
|
return result;
|
|
};
|
|
noInline(foo);
|
|
for (var i = 0; i < 10000; ++i) {
|
|
if (foo() !== "12345")
|
|
throw new Error("bad result");
|
|
}
|
|
foo(null);
|
|
})();
|
|
(function() {
|
|
// Iterate over an object with normal non-indexed properties.
|
|
var foo = function() {
|
|
var o = {};
|
|
o.x = 1;
|
|
o.y = 2;
|
|
o.z = 3;
|
|
var result = "";
|
|
for (var p in o)
|
|
result += o[p];
|
|
return result;
|
|
};
|
|
noInline(foo);
|
|
for (var i = 0; i < 10000; ++i) {
|
|
if (foo() !== "123")
|
|
throw new Error("bad result");
|
|
}
|
|
foo(null);
|
|
})();
|
|
(function() {
|
|
// Iterate over an object with both indexed and non-indexed properties.
|
|
var foo = function() {
|
|
var o = {};
|
|
o.x = 1;
|
|
o.y = 2;
|
|
o.z = 3;
|
|
o[0] = 4;
|
|
o[1] = 5;
|
|
o[2] = 6;
|
|
var result = "";
|
|
for (var p in o)
|
|
result += o[p];
|
|
return result;
|
|
};
|
|
noInline(foo);
|
|
for (var i = 0; i < 10000; ++i) {
|
|
if (foo() != "456123")
|
|
throw new Error("bad result");
|
|
}
|
|
foo(null);
|
|
})();
|
|
(function() {
|
|
// Iterate over an array with both indexed and non-indexed properties.
|
|
var foo = function() {
|
|
var a = [4, 5, 6];
|
|
a.x = 1;
|
|
a.y = 2;
|
|
a.z = 3;
|
|
var result = "";
|
|
for (var p in a)
|
|
result += a[p];
|
|
return result;
|
|
};
|
|
noInline(foo);
|
|
for (var i = 0; i < 10000; ++i) {
|
|
if (foo() !== "456123")
|
|
throw new Error("bad result");
|
|
}
|
|
foo(null);
|
|
})();
|
|
(function() {
|
|
var foo = function(a, b) {
|
|
for (var p in b) {
|
|
var f1 = a[p];
|
|
var f2 = b[p];
|
|
if (f1 === f2)
|
|
continue;
|
|
a[p] = b[p];
|
|
}
|
|
};
|
|
noInline(foo);
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var o1 = {};
|
|
var o2 = {};
|
|
o2.x = 42;
|
|
o2.y = 53;
|
|
foo(o1, o2);
|
|
if (o1.x !== o2.x)
|
|
throw new Error("bad result: " + o1.x + "!==" + o2.x);
|
|
if (o1.y !== o2.y)
|
|
throw new Error("bad result: " + o1.y + "!==" + o2.y);
|
|
}
|
|
})();
|
|
|
|
(function() {
|
|
var foo = function(a, b) {
|
|
for (var p = b in a) {}
|
|
return p;
|
|
};
|
|
noInline(foo);
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var expected = 'expected-result';
|
|
var result = foo({}, expected);
|
|
if (expected !== result)
|
|
throw new Error("bad result: " + result + "!==" + expected);
|
|
}
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var expected = 'a';
|
|
var result = foo({a:'abcd'}, expected);
|
|
if (expected !== result)
|
|
throw new Error("bad result: " + result + "!==" + expected);
|
|
}
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var expected = 'b';
|
|
var result = foo({a:'abcd', b: 'bcde'}, expected);
|
|
if (expected !== result)
|
|
throw new Error("bad result: " + result + "!==" + expected);
|
|
}
|
|
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var expected = 'c';
|
|
var o = {a:'abcd', b: 'bcde'};
|
|
o.c = 'cdef';
|
|
var result = foo(o, expected);
|
|
if (expected !== result)
|
|
throw new Error("bad result: " + result + "!==" + expected);
|
|
}
|
|
})();
|
|
|
|
(function() {
|
|
var boo = function () { return 'expected-result'; };
|
|
var foo = function(a) {
|
|
for (var p = boo() in a) {}
|
|
return p;
|
|
};
|
|
noInline(foo);
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var expected = 'expected-result';
|
|
var result = foo({});
|
|
if (expected !== result)
|
|
throw new Error("bad result: " + result + "!==" + expected);
|
|
}
|
|
})();
|
|
|
|
shouldThrowSyntaxError(
|
|
`function foo(a, b) {
|
|
{
|
|
let p = 'some-value';
|
|
for (var p = b in a) {}
|
|
}
|
|
}`
|
|
);
|
|
|
|
(function() {
|
|
var foo = function(a, b, c) {
|
|
for (var p = b + c in a) {}
|
|
return p;
|
|
};
|
|
noInline(foo);
|
|
for (var i = 0; i < 10000; ++i) {
|
|
var expected = 'expected-result';
|
|
var result = foo({}, 'expected', '-result');
|
|
if (expected !== result)
|
|
throw new Error("bad result: " + result + "!==" + expected);
|
|
}
|
|
})();
|
|
|
|
shouldThrowSyntaxError(
|
|
`function foo() {
|
|
'use strict';
|
|
for (var i = 0 in {}) {}
|
|
}`
|
|
);
|
|
|
|
shouldThrowSyntaxError(
|
|
`function foo() {
|
|
const i = 10;
|
|
for (var i = 0 in {}) {}
|
|
}`
|
|
);
|