You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
1.3 KiB

/*===
TypeError
TypeError
TypeError
===*/
/* TypeError is required for cyclic structures. */
function testCycle1() {
var obj = { foo: 1 };
obj.cycle = obj;
print(JSON.stringify(obj));
}
function testCycle2() {
var obj1 = { foo: 1 };
var obj2 = { bar: 2 };
obj1.cycle = obj2;
obj2.cycle = obj1;
print(JSON.stringify(obj1));
}
function testCycle3() {
var obj1 = { foo: 1 };
var obj2 = { bar: 2 };
var obj3 = { quux: 3 };
obj1.cycle = obj2;
obj2.cycle = obj3;
obj3.cycle = obj1;
print(JSON.stringify(obj1));
}
try {
testCycle1();
} catch (e) {
print(e.name);
}
try {
testCycle2();
} catch (e) {
print(e.name);
}
try {
testCycle3();
} catch (e) {
print(e.name);
}
/*===
{"foo":1,"bar":2,"ref1":{"quux":3,"baz":4,"ref1":{"quuux":5},"ref2":{"quuux":5}},"ref2":{"quux":3,"baz":4,"ref1":{"quuux":5},"ref2":{"quuux":5}}}
===*/
/* The following visits the same object multiple times, but not in a cycle.
* This test ensures that any loop stack or hash map is unwound correctly.
*/
function testNoCycle1() {
var obj1 = { foo: 1, bar: 2 };
var obj2 = { quux: 3, baz: 4 };
var obj3 = { quuux: 5 };
obj1.ref1 = obj2;
obj1.ref2 = obj2;
obj2.ref1 = obj3;
obj2.ref2 = obj3;
print(JSON.stringify(obj1));
}
try {
testNoCycle1();
} catch (e) {
print(e.name);
}