function incognito(value) {
    var array = [];
    array.push(value);
    array.push("ignore me");
    array.push(value);
    array.push({ ignore: "me" });
    return array[((Math.random() * 2) | 0) * 2];
}

// cached Object.is
var objectIs = Object.is;

// pure JS version of Object.is
function sameValue(a, b) {
    return (a === b) ?
        (a !== 0 || (1 / a === 1 / b)) :
        (a !== a && b !== b);
}

var testFiveA = incognito("back5");
var testFiveB = incognito("2back5".substring(1));
var testPi = incognito("PI");
var testNaN = incognito(NaN);
var testNaN_2 = incognito(NaN);

var result;

function test1()
{
    return testFiveA === testFiveB;
}
noInline(test1);

function test2()
{
    return Object.is(testFiveA, testFiveB);
}
noInline(test2);

function test3()
{
    return sameValue(testFiveA, testFiveB);
}
noInline(test3);

function test4()
{
    return testFiveA === testPi;
}
noInline(test4);

function test5()
{
    return Object.is(testFiveA, testPi);
}
noInline(test5);

function test6()
{
    return sameValue(testFiveA, testPi);
}
noInline(test6);

var verbose = false;
var tests = [
//     test1,
    test2,
//     test3,
//     test4,
    test5,
//     test6,
];
for (let test of tests) {
    if (verbose)
        var time = Date.now();

    for (let i = 0; i < 2e7; ++i)
        test();

    if (verbose)
        print(Date.now() - time);
}
