Skip to content

Commit 1418889

Browse files
committed
Update additional test cases
1 parent a148bb8 commit 1418889

File tree

19 files changed

+2148
-0
lines changed

19 files changed

+2148
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
//@ runFTLNoCJIT
2+
3+
function shouldEqual(testId, actual, expected) {
4+
if (actual != expected) {
5+
throw testId + ": ERROR: expect " + expected + ", actual " + actual;
6+
}
7+
}
8+
9+
function frozenArrayReviver(k, v) {
10+
if (k === "a") {
11+
this.b = Object.freeze(["unmodifiable"]);
12+
return v;
13+
}
14+
if (k === "0")
15+
return "modified";
16+
return v;
17+
}
18+
19+
function frozenArrayLikeObjectReviver(k, v) {
20+
if (k === "a") {
21+
var obj = {};
22+
obj[0] = 'unmodifiable';
23+
obj.length = 1;
24+
this.b = Object.freeze(obj);
25+
return v;
26+
}
27+
if (k === "0")
28+
return "modified";
29+
return v;
30+
}
31+
32+
function frozenArrayReviverWithDelete(k, v) {
33+
if (k === "a") {
34+
this.b = Object.freeze(["unmodifiable"]);
35+
return v;
36+
}
37+
if (k === "0")
38+
return undefined;
39+
return v;
40+
}
41+
42+
function frozenArrayLikeObjectReviverWithDelete(k, v) {
43+
if (k === "a") {
44+
var obj = {};
45+
obj[0] = 'unmodifiable';
46+
obj.length = 1;
47+
this.b = Object.freeze(obj);
48+
return v;
49+
}
50+
if (k === "0")
51+
return undefined;
52+
return v;
53+
}
54+
55+
function runTest(testId, reviver, expectedValue, expectedException) {
56+
let numIterations = 10000;
57+
for (var i = 0; i < numIterations; i++) {
58+
var exception = undefined;
59+
60+
var obj;
61+
try {
62+
obj = JSON.parse('{ "a": 0, "b": 0 }', reviver);
63+
} catch (e) {
64+
exception = "" + e;
65+
exception = exception.substr(0, 10); // Search for "TypeError:".
66+
}
67+
shouldEqual(testId, exception, expectedException);
68+
shouldEqual(testId, obj.b[0], expectedValue);
69+
}
70+
}
71+
72+
runTest(10000, frozenArrayReviver, "unmodifiable", undefined);
73+
runTest(10001, frozenArrayLikeObjectReviver, "unmodifiable", undefined);
74+
runTest(10002, frozenArrayReviverWithDelete, "unmodifiable", undefined);
75+
runTest(10003, frozenArrayLikeObjectReviverWithDelete, "unmodifiable", undefined);
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
'use strict';
2+
3+
function assert(b) {
4+
if (!b)
5+
throw new Error("Bad");
6+
}
7+
8+
function test1(x) {
9+
for (let x = 20; x < 30; ++x) { }
10+
return x;
11+
}
12+
function test2(x) {
13+
for (let x of [1,2,3]) { }
14+
return x;
15+
}
16+
function test3(x) {
17+
for (let x in {}) { }
18+
return x;
19+
}
20+
function test4(x) {
21+
let i = 0;
22+
for (const x = 20; i < 1; ++i) { }
23+
return x;
24+
}
25+
function test5(x) {
26+
for (const x of [1, 2, 3]) { }
27+
return x;
28+
}
29+
function test6(x) {
30+
for (const x in {}) { }
31+
return x;
32+
}
33+
34+
let test7 = (x) => {
35+
for (let x = 20; x < 30; ++x) { }
36+
return x;
37+
}
38+
let test8 = (x) => {
39+
for (let x of [1,2,3]) { }
40+
return x;
41+
}
42+
let test9 = (x) => {
43+
for (let x in {}) { }
44+
return x;
45+
}
46+
let test10 = (x) => {
47+
let i = 0;
48+
for (const x = 20; i < 1; ++i) { }
49+
return x;
50+
}
51+
let test11 = (x) => {
52+
for (const x of [1, 2, 3]) { }
53+
return x;
54+
}
55+
let test12 = (x) => {
56+
for (const x in {}) { }
57+
return x;
58+
}
59+
60+
for (let test of [test1, test2, test3, test4, test5, test7, test8, test9, test10, test11, test12])
61+
assert(test("foo") === "foo");
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
function shouldBe(actual, expected) {
2+
if (actual !== expected)
3+
throw new Error(`bad value: ${String(actual)}`);
4+
}
5+
6+
function shouldBeIteratorResult(actual, { value, done })
7+
{
8+
shouldBe(actual.value, value);
9+
shouldBe(actual.done, done);
10+
}
11+
12+
function unreachable()
13+
{
14+
throw new Error('unreachable');
15+
}
16+
17+
function shouldThrow(func, errorMessage) {
18+
var errorThrown = false;
19+
var error = null;
20+
try {
21+
func();
22+
} catch (e) {
23+
errorThrown = true;
24+
error = e;
25+
}
26+
if (!errorThrown)
27+
throw new Error('not thrown');
28+
if (String(error) !== errorMessage)
29+
throw new Error(`bad error: ${String(error)}`);
30+
}
31+
32+
(function () {
33+
function *gen() {
34+
yield yield 20;
35+
yield 42;
36+
}
37+
38+
{
39+
let g = gen();
40+
shouldBeIteratorResult(g.next(0), { value: 20, done: false });
41+
shouldBeIteratorResult(g.return(20), { value: 20, done: true });
42+
shouldBeIteratorResult(g.return(20), { value: 20, done: true });
43+
shouldBeIteratorResult(g.next(42), { value: undefined, done: true });
44+
}
45+
{
46+
let g = gen();
47+
shouldBeIteratorResult(g.return(42), { value: 42, done: true });
48+
shouldBeIteratorResult(g.next(42), { value: undefined, done: true });
49+
shouldBeIteratorResult(g.return(42), { value: 42, done: true });
50+
}
51+
}());
52+
53+
(function () {
54+
function *gen() {
55+
return 42;
56+
}
57+
58+
{
59+
let g = gen();
60+
shouldBeIteratorResult(g.next(), { value: 42, done: true });
61+
shouldBeIteratorResult(g.return(0), { value: 0, done: true });
62+
}
63+
{
64+
let g = gen();
65+
shouldBeIteratorResult(g.return(0), { value: 0, done: true });
66+
shouldBeIteratorResult(g.next(), { value: undefined, done: true });
67+
shouldBeIteratorResult(g.return(42), { value: 42, done: true });
68+
}
69+
}());
70+
71+
(function () {
72+
function *gen() {
73+
}
74+
75+
{
76+
let g = gen();
77+
shouldBeIteratorResult(g.next(), { value: undefined, done: true });
78+
shouldBeIteratorResult(g.return(0), { value: 0, done: true });
79+
}
80+
{
81+
let g = gen();
82+
shouldBeIteratorResult(g.return(0), { value: 0, done: true });
83+
shouldBeIteratorResult(g.next(), { value: undefined, done: true });
84+
shouldBeIteratorResult(g.return(42), { value: 42, done: true });
85+
}
86+
}());
87+
88+
(function () {
89+
function *gen() {
90+
try {
91+
yield 42;
92+
} finally {
93+
return 400;
94+
}
95+
}
96+
97+
{
98+
let g = gen();
99+
shouldBeIteratorResult(g.next(), { value: 42, done: false });
100+
shouldBeIteratorResult(g.return(0), { value: 400, done: true });
101+
shouldBeIteratorResult(g.return(0), { value: 0, done: true });
102+
}
103+
{
104+
let g = gen();
105+
shouldBeIteratorResult(g.return(0), { value: 0, done: true });
106+
shouldBeIteratorResult(g.next(), { value: undefined, done: true });
107+
shouldBeIteratorResult(g.return(42), { value: 42, done: true });
108+
}
109+
}());
110+
111+
112+
(function () {
113+
function *gen() {
114+
try {
115+
yield 42;
116+
} finally {
117+
throw new Error("thrown");
118+
}
119+
}
120+
121+
{
122+
let g = gen();
123+
shouldBeIteratorResult(g.next(), { value: 42, done: false });
124+
shouldThrow(() => g.return(0), `Error: thrown`);
125+
shouldBeIteratorResult(g.return(0), { value: 0, done: true });
126+
}
127+
{
128+
let g = gen();
129+
shouldBeIteratorResult(g.return(0), { value: 0, done: true });
130+
shouldBeIteratorResult(g.next(), { value: undefined, done: true });
131+
shouldBeIteratorResult(g.return(42), { value: 42, done: true });
132+
}
133+
}());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"use strict";
2+
3+
let objs = [
4+
function() { },
5+
new String(),
6+
{foo: 45},
7+
{bar:50, foo: 45},
8+
{baz:70, bar:50, foo: 45},
9+
new Date,
10+
];
11+
12+
let has = ({}).hasOwnProperty;
13+
function foo(o) {
14+
return has.call(o, "foo");
15+
}
16+
noInline(foo);
17+
18+
for (let i = 0; i < 10000; i++)
19+
foo(objs[i % objs.length]);
20+
21+
foo("foo");

0 commit comments

Comments
 (0)