Source code
Revision control
Copy as Markdown
Other Tools
load(libdir + "asserts.js");
function testPopSimple() {
var a = [4, 3, 2, 1, 0];
Object.preventExtensions(a);
for (var i = 0; i < 5; i++)
assertEq(a.pop(), i);
assertEq(a.length, 0);
a = [1, 2, 3];
Object.seal(a);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.pop(), TypeError);
assertEq(a.toString(), "1,2,3");
a = [1, 2, 3];
Object.freeze(a);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.pop(), TypeError);
assertEq(a.toString(), "1,2,3");
}
testPopSimple();
function testPopHoles() {
var a = [1, , 3];
Object.preventExtensions(a);
assertEq(a.pop(), 3);
assertEq(a.pop(), undefined);
assertEq(a.pop(), 1);
assertEq(a.length, 0);
a = [1, ,];
Object.seal(a);
assertEq(a.pop(), undefined);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.pop(), TypeError);
assertEq(a.toString(), "1");
a = [1, ,];
Object.freeze(a);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.pop(), TypeError);
assertEq(a.toString(), "1,");
}
testPopHoles();
function testPushSimple() {
var a = [1, 2, 3];
Object.preventExtensions(a);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.push(4), TypeError);
assertEq(a.length, 3);
assertEq(a.toString(), "1,2,3");
a = [1, 2, 3];
Object.seal(a);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.push(4), TypeError);
assertEq(a.toString(), "1,2,3");
a = [1, 2, 3];
Object.freeze(a);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.push(4), TypeError);
assertEq(a.toString(), "1,2,3");
}
testPushSimple();
function testPushHoles() {
var a = [,,,];
Object.preventExtensions(a);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.push(4), TypeError);
assertEq(a.length, 3);
assertEq(a.toString(), ",,");
a = [,,,];
Object.seal(a);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.push(4), TypeError);
assertEq(a.toString(), ",,");
a = [,,,];
Object.freeze(a);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.push(4), TypeError);
assertEq(a.toString(), ",,");
}
testPushHoles();
function testReverseSimple() {
var a = [1, 2, 3];
Object.preventExtensions(a);
a.reverse();
assertEq(a.toString(), "3,2,1");
a = [1, 2, 3];
Object.seal(a);
a.reverse();
assertEq(a.toString(), "3,2,1");
a = [1, 2, 3];
Object.freeze(a);
assertThrowsInstanceOf(() => a.reverse(), TypeError);
assertEq(a.toString(), "1,2,3");
}
testReverseSimple();
function testReverseHoles() {
var a = [1, 2, , 4];
Object.preventExtensions(a);
assertThrowsInstanceOf(() => a.reverse(), TypeError);
assertEq(a.toString(), "4,,,1");
a = [1, 2, , 4];
Object.seal(a);
assertThrowsInstanceOf(() => a.reverse(), TypeError);
assertEq(a.toString(), "4,2,,1");
a = [1, 2, , 4];
Object.freeze(a);
assertThrowsInstanceOf(() => a.reverse(), TypeError);
assertEq(a.toString(), "1,2,,4");
}
testReverseHoles();
function testShiftSimple() {
var a = [1, 2, 3];
Object.preventExtensions(a);
assertEq(a.shift(), 1);
assertEq(a.toString(), "2,3");
for (var i = 0; i < 10; i++)
a.shift();
assertEq(a.length, 0);
a = [1, 2, 3];
Object.seal(a);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.shift(), TypeError);
assertEq(a.toString(), "3,3,3");
a = [1, 2, 3];
Object.freeze(a);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.shift(), TypeError);
assertEq(a.toString(), "1,2,3");
}
testShiftSimple();
testShiftSimple();
function testShiftHoles() {
var a = [1, 2, , 4];
Object.preventExtensions(a);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.shift(), TypeError);
assertEq(a.toString(), ",,,4");
a = [1, 2, , 4];
Object.seal(a);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.shift(), TypeError);
assertEq(a.toString(), "2,2,,4");
a = [1, 2, , 4];
Object.freeze(a);
for (var i = 0; i < 10; i++)
assertThrowsInstanceOf(() => a.shift(), TypeError);
assertEq(a.toString(), "1,2,,4");
}
testShiftHoles();
testShiftHoles();
function testUnshiftSimple() {
var a = [1, 2, 3];
Object.preventExtensions(a);
assertThrowsInstanceOf(() => a.unshift(0), TypeError);
assertEq(a.toString(), "1,2,3");
a = [1, 2, 3];
Object.seal(a);
assertThrowsInstanceOf(() => a.unshift(0), TypeError);
assertEq(a.toString(), "1,2,3");
a = [1, 2, 3];
Object.freeze(a);
assertThrowsInstanceOf(() => a.unshift(0), TypeError);
assertEq(a.toString(), "1,2,3");
}
testUnshiftSimple();
function testUnshiftHoles() {
var a = [,,,];
Object.preventExtensions(a);
assertThrowsInstanceOf(() => a.unshift(0), TypeError);
assertEq(a.toString(), ",,");
a = [,,,];
Object.seal(a);
assertThrowsInstanceOf(() => a.unshift(0), TypeError);
assertEq(a.toString(), ",,");
a = [,,,];
Object.freeze(a);
assertThrowsInstanceOf(() => a.unshift(0), TypeError);
assertEq(a.toString(), ",,");
}
testUnshiftHoles();
function testSpliceDelete() {
var a = [1, 2, 3];
Object.preventExtensions(a);
a.splice(1, 2);
assertEq(a.toString(), "1");
a = [1, 2, 3];
Object.seal(a);
assertThrowsInstanceOf(() => a.splice(1, 2), TypeError);
assertEq(a.toString(), "1,2,3");
a = [1, 2, 3];
Object.freeze(a);
assertThrowsInstanceOf(() => a.splice(1, 2), TypeError);
assertEq(a.toString(), "1,2,3");
}
testSpliceDelete();
function testSpliceAdd() {
var a = [1, 2, 3];
Object.preventExtensions(a);
assertThrowsInstanceOf(() => a.splice(2, 1, 4, 5), TypeError);
assertEq(a.toString(), "1,2,4");
a = [1, 2, 3];
Object.seal(a);
assertThrowsInstanceOf(() => a.splice(2, 1, 4, 5), TypeError);
assertEq(a.toString(), "1,2,4");
a = [1, 2, 3];
Object.freeze(a);
assertThrowsInstanceOf(() => a.splice(2, 1, 4, 5), TypeError);
assertEq(a.toString(), "1,2,3");
}
testSpliceAdd();
function testSortSimple() {
var a = [3, 1, 2];
Object.preventExtensions(a);
a.sort();
assertEq(a.toString(), "1,2,3");
a = [3, 1, 2];
Object.seal(a);
a.sort();
assertEq(a.toString(), "1,2,3");
a = [3, 1, 2];
Object.freeze(a);
assertThrowsInstanceOf(() => a.sort(), TypeError);
assertEq(a.toString(), "3,1,2");
}
testSortSimple();
function testSortHoles() {
var a = [, , 3, 1, 2];
Object.preventExtensions(a);
assertThrowsInstanceOf(() => a.sort(), TypeError);
assertEq(a.toString(), ",,3,1,2");
a = [, , 3, 1, 2];
Object.seal(a);
assertThrowsInstanceOf(() => a.sort(), TypeError);
assertEq(a.toString(), ",,3,1,2");
a = [, , 3, 1, 2];
Object.freeze(a);
assertThrowsInstanceOf(() => a.sort(), TypeError);
assertEq(a.toString(), ",,3,1,2");
}
testSortHoles();