blob: 89a2bd4386bf4d65b8a373d3deacced6b06e4fbd [file] [log] [blame]
function shouldBe(actual, expected) {
if (actual !== expected)
throw new Error('bad value: ' + actual);
}
noInline(shouldBe);
function div(a, b) {
return a / b;
}
noInline(div);
function NaN1() {
return div(0, 0);
}
function NaN2() {
return NaN;
}
function NaN3() {
return Infinity/Infinity;
}
function NaN4() {
return NaN + NaN;
}
function NaN1NoInline() {
return div(0, 0);
}
noInline(NaN1NoInline);
function NaN2NoInline() {
return NaN;
}
noInline(NaN2NoInline);
function NaN3NoInline() {
return Infinity/Infinity;
}
noInline(NaN3NoInline);
function NaN4NoInline() {
return NaN + NaN;
}
noInline(NaN4NoInline);
function test1()
{
var map = new Map();
map.set(NaN1(), 1);
map.set(NaN2(), 2);
map.set(NaN3(), 3);
map.set(NaN4(), 4);
return map.size;
}
noInline(test1);
function test2()
{
return new Map([
[NaN1(), 1],
[NaN2(), 2],
[NaN3(), 3],
[NaN4(), 4]
]).size;
}
noInline(test2);
function test3()
{
var map = new Map();
map.set(NaN1NoInline(), 1);
map.set(NaN2NoInline(), 2);
map.set(NaN3NoInline(), 3);
map.set(NaN4NoInline(), 4);
return map.size;
}
noInline(test3);
function test4()
{
return new Map([
[NaN1NoInline(), 1],
[NaN2NoInline(), 2],
[NaN3NoInline(), 3],
[NaN4NoInline(), 4]
]).size;
}
noInline(test4);
for (var i = 0; i < 1e5; ++i) {
shouldBe(test1(), 1);
shouldBe(test2(), 1);
shouldBe(test3(), 1);
shouldBe(test4(), 1);
}