description(
"This test checks corner cases of the number cell reuse code. In particular, it checks for known cases where code generation for number cell reuse caused assertions to fail."
);

function leftConstantRightSimple(a)
{
    return 0.1 * (a * a);
}

shouldBe("leftConstantRightSimple(2)", "0.4");

function leftConstantRightComplex(a)
{
    return 0.1 * (a * a + a);
}

shouldBe("leftConstantRightComplex(1)", "0.2");

function leftSimpleRightConstant(a)
{
    return (a * a) * 0.1;
}

shouldBe("leftSimpleRightConstant(2)", "0.4");

function leftComplexRightConstant(a)
{
    return (a * a + a) * 0.1;
}

shouldBe("leftComplexRightConstant(1)", "0.2");

function leftThisRightSimple(a)
{
    return this * (a * a);
}

shouldBeNaN("leftThisRightSimple(2)");
shouldBe("leftThisRightSimple.call(2, 2)", "8");

function leftThisRightComplex(a)
{
    return this * (a * a + a);
}

shouldBeNaN("leftThisRightComplex(2)");
shouldBe("leftThisRightComplex.call(2, 2)", "12");

function leftSimpleRightThis(a)
{
    return (a * a) * this;
}

shouldBeNaN("leftSimpleRightThis(2)");
shouldBe("leftSimpleRightThis.call(2, 2)", "8");

function leftComplexRightThis(a)
{
    return (a * a + a) * this;
}

shouldBeNaN("leftComplexRightThis(2)");
shouldBe("leftComplexRightThis.call(2, 2)", "12");
