Source code
Revision control
Copy as Markdown
Other Tools
function generateObjectLiteral(propCount, computedPropCount) {
const parts = [];
for (let i = 0; i < propCount; i++) {
parts.push(`prop${i}: ${i}`);
}
for (let i = 0; i < computedPropCount; i++) {
parts.push(`["computedProp${i}"]: ${i}`);
}
return `let obj = {${parts.join(",")}}`;
}
function assertPropCount(obj, count) {
assertEq(Object.keys(obj).length === count, true);
}
const objectSizes = [0, 1, 2, 4, 8, 16, 255, 256];
// objects with computed properties only
function testComputedProperties() {
for (let numOfProps of objectSizes) {
let obj = Function(
`${generateObjectLiteral(0, numOfProps)}; return obj;`
).call();
assertPropCount(obj, numOfProps);
}
}
// objects with one computed properties and the rest are normal;
function testMixedProperties() {
for (let numOfProps of objectSizes) {
let obj = Function(
`${generateObjectLiteral(numOfProps, 1)}; return obj;`
).call();
assertPropCount(obj, numOfProps + 1);
}
}
// objects with normal properties only
function testNormalProperties() {
for (let numOfProps of objectSizes) {
let obj = Function(
`${generateObjectLiteral(numOfProps, 0)}; return obj;`
).call();
assertPropCount(obj, numOfProps);
}
}
testNormalProperties();
testMixedProperties();
testComputedProperties();