Source code

Revision control

Copy as Markdown

Other Tools

function has(k) {
var p = {};
p[k] = 1;
// TypedArrays intercept any TypedArray indices (canonical numeric indices in the spec),
// so when reading |k| from |ta| we shouldn't return the inherited property |p[k]|.
var ta = new Int32Array(10);
Object.setPrototypeOf(ta, p);
// Assume sixteen different objects trigger a transition to a megamorphic IC.
var xs = [
ta,
{a:0}, {b:0}, {c:0}, {d:0}, {e:0}, {f:0}, {g:0}, {h:0},
{j:0}, {k:0}, {l:0}, {m:0}, {n:0}, {o:0}, {p:0},
];
for (var i = 0; i < 100; ++i) {
var x = xs[i & 15];
assertEq(k in x, false);
}
}
// Make sure we use a distinct function for each test.
function test(fn) {
return Function(`return ${fn};`)();
}
// TypedArray index representable as an Int32.
test(has)(100);
test(has)("100");
// TypedArray index not representable as an Int32.
test(has)(4294967296);
test(has)("4294967296");
// Non-finite TypedArray indices.
test(has)(Infinity);
test(has)("Infinity");
test(has)(-Infinity);
test(has)("-Infinity");
test(has)(NaN);
test(has)("NaN");
// TypedArray index with fractional parts.
test(has)(1.1);
test(has)("1.1");
// TypedArray index with exponent parts.
test(has)(1e+25);
test(has)("1e+25");