956 lines
14 KiB
JavaScript
956 lines
14 KiB
JavaScript
|
// Copyright 2013 the V8 project authors. All rights reserved.
|
||
|
// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
|
||
|
//
|
||
|
// Redistribution and use in source and binary forms, with or without
|
||
|
// modification, are permitted provided that the following conditions
|
||
|
// are met:
|
||
|
// 1. Redistributions of source code must retain the above copyright
|
||
|
// notice, this list of conditions and the following disclaimer.
|
||
|
// 2. Redistributions in binary form must reproduce the above copyright
|
||
|
// notice, this list of conditions and the following disclaimer in the
|
||
|
// documentation and/or other materials provided with the distribution.
|
||
|
//
|
||
|
// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
|
||
|
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||
|
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||
|
// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
|
||
|
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||
|
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||
|
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||
|
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
|
||
|
description(
|
||
|
'Tests whether bytecode codegen properly handles temporaries.'
|
||
|
);
|
||
|
|
||
|
var a = true;
|
||
|
a = false || a;
|
||
|
shouldBeTrue("a");
|
||
|
|
||
|
var b = false;
|
||
|
b = true && b;
|
||
|
shouldBeFalse("b");
|
||
|
|
||
|
function TestObject() {
|
||
|
this.toString = function() { return this.test; }
|
||
|
this.test = "FAIL";
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
function assign_test1()
|
||
|
{
|
||
|
var testObject = new TestObject;
|
||
|
var a = testObject;
|
||
|
a.test = "PASS";
|
||
|
return testObject.test;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test1()", "'PASS'");
|
||
|
|
||
|
function assign_test2()
|
||
|
{
|
||
|
var testObject = new TestObject;
|
||
|
var a = testObject;
|
||
|
a = a.test = "PASS";
|
||
|
return testObject.test;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test2()", "'PASS'");
|
||
|
|
||
|
function assign_test3()
|
||
|
{
|
||
|
var testObject = new TestObject;
|
||
|
var a = testObject;
|
||
|
a.test = a = "PASS";
|
||
|
return testObject.test;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test3()", "'PASS'");
|
||
|
|
||
|
var testObject4 = new TestObject;
|
||
|
var a4 = testObject4;
|
||
|
a4.test = this.a4 = "PASS";
|
||
|
|
||
|
shouldBe("testObject4.test", "'PASS'");
|
||
|
|
||
|
var testObject5 = new TestObject;
|
||
|
var a5 = testObject5;
|
||
|
a5 = this.a5.test = "PASS";
|
||
|
|
||
|
shouldBe("testObject5.test", "'PASS'");
|
||
|
|
||
|
function assign_test6()
|
||
|
{
|
||
|
var testObject = new TestObject;
|
||
|
var a = testObject;
|
||
|
a["test"] = "PASS";
|
||
|
return testObject.test;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test6()", "'PASS'");
|
||
|
|
||
|
function assign_test7()
|
||
|
{
|
||
|
var testObject = new TestObject;
|
||
|
var a = testObject;
|
||
|
a = a["test"] = "PASS";
|
||
|
return testObject.test;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test7()", "'PASS'");
|
||
|
|
||
|
function assign_test8()
|
||
|
{
|
||
|
var testObject = new TestObject;
|
||
|
var a = testObject;
|
||
|
a["test"] = a = "PASS";
|
||
|
return testObject.test;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test8()", "'PASS'");
|
||
|
|
||
|
function assign_test9()
|
||
|
{
|
||
|
var testObject = new TestObject;
|
||
|
var a = testObject;
|
||
|
a["test"] = this.a = "PASS";
|
||
|
return testObject.test;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test9()", "'PASS'");
|
||
|
|
||
|
var testObject10 = new TestObject;
|
||
|
var a10 = testObject10;
|
||
|
a10 = this.a10["test"] = "PASS";
|
||
|
|
||
|
shouldBe("testObject10.test", "'PASS'");
|
||
|
|
||
|
function assign_test11()
|
||
|
{
|
||
|
var testObject = new TestObject;
|
||
|
var a = testObject;
|
||
|
a[a = "test"] = "PASS";
|
||
|
return testObject.test;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test11()", "'PASS'");
|
||
|
|
||
|
function assign_test12()
|
||
|
{
|
||
|
var test = "test";
|
||
|
var testObject = new TestObject;
|
||
|
var a = testObject;
|
||
|
a[test] = "PASS";
|
||
|
return testObject.test;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test12()", "'PASS'");
|
||
|
|
||
|
function assign_test13()
|
||
|
{
|
||
|
var testObject = new TestObject;
|
||
|
var a = testObject;
|
||
|
a.test = (a = "FAIL", "PASS");
|
||
|
return testObject.test;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test13()", "'PASS'");
|
||
|
|
||
|
function assign_test14()
|
||
|
{
|
||
|
var testObject = new TestObject;
|
||
|
var a = testObject;
|
||
|
a["test"] = (a = "FAIL", "PASS");
|
||
|
return testObject.test;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test14()", "'PASS'");
|
||
|
|
||
|
function assign_test15()
|
||
|
{
|
||
|
var test = "test";
|
||
|
var testObject = new TestObject;
|
||
|
var a = testObject;
|
||
|
a[test] = (test = "FAIL", "PASS");
|
||
|
return testObject.test;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test15()", "'PASS'");
|
||
|
|
||
|
function assign_test16()
|
||
|
{
|
||
|
var a = 1;
|
||
|
a = (a = 2);
|
||
|
return a;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test16()", "2");
|
||
|
|
||
|
var a17 = 1;
|
||
|
a17 += (a17 += 1);
|
||
|
|
||
|
shouldBe("a17", "3");
|
||
|
|
||
|
function assign_test18()
|
||
|
{
|
||
|
var a = 1;
|
||
|
a += (a += 1);
|
||
|
return a;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test18()", "3");
|
||
|
|
||
|
var a19 = { b: 1 };
|
||
|
a19.b += (a19.b += 1);
|
||
|
|
||
|
shouldBe("a19.b", "3");
|
||
|
|
||
|
function assign_test20()
|
||
|
{
|
||
|
var a = { b: 1 };
|
||
|
a.b += (a.b += 1);
|
||
|
return a.b;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test20()", "3");
|
||
|
|
||
|
var a21 = { b: 1 };
|
||
|
a21["b"] += (a21["b"] += 1);
|
||
|
|
||
|
shouldBe("a21['b']", "3");
|
||
|
|
||
|
function assign_test22()
|
||
|
{
|
||
|
var a = { b: 1 };
|
||
|
a["b"] += (a["b"] += 1);
|
||
|
return a["b"];
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test22()", "3");
|
||
|
|
||
|
function assign_test23()
|
||
|
{
|
||
|
var o = { b: 1 };
|
||
|
var a = o;
|
||
|
a.b += a = 2;
|
||
|
return o.b;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test23()", "3");
|
||
|
|
||
|
function assign_test24()
|
||
|
{
|
||
|
var o = { b: 1 };
|
||
|
var a = o;
|
||
|
a["b"] += a = 2;
|
||
|
return o["b"];
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test24()", "3");
|
||
|
|
||
|
function assign_test25()
|
||
|
{
|
||
|
var o = { b: 1 };
|
||
|
var a = o;
|
||
|
a[a = "b"] += a = 2;
|
||
|
return o["b"];
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test25()", "3");
|
||
|
|
||
|
function assign_test26()
|
||
|
{
|
||
|
var o = { b: 1 };
|
||
|
var a = o;
|
||
|
var b = "b";
|
||
|
a[b] += a = 2;
|
||
|
return o["b"];
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test26()", "3");
|
||
|
|
||
|
function assign_test27()
|
||
|
{
|
||
|
var o = { b: 1 };
|
||
|
var a = o;
|
||
|
a.b += (a = 100, 2);
|
||
|
return o.b;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test27()", "3");
|
||
|
|
||
|
function assign_test28()
|
||
|
{
|
||
|
var o = { b: 1 };
|
||
|
var a = o;
|
||
|
a["b"] += (a = 100, 2);
|
||
|
return o["b"];
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test28()", "3");
|
||
|
|
||
|
function assign_test29()
|
||
|
{
|
||
|
var o = { b: 1 };
|
||
|
var a = o;
|
||
|
var b = "b";
|
||
|
a[b] += (a = 100, 2);
|
||
|
return o["b"];
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test29()", "3");
|
||
|
|
||
|
function assign_test30()
|
||
|
{
|
||
|
var a = "foo";
|
||
|
a += (a++);
|
||
|
return a;
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test30()", "'fooNaN'");
|
||
|
|
||
|
function assign_test31()
|
||
|
{
|
||
|
function result() { return "PASS"; }
|
||
|
return (globalVar = result)()
|
||
|
}
|
||
|
|
||
|
shouldBe("assign_test31()", "'PASS'");
|
||
|
|
||
|
function bracket_test1()
|
||
|
{
|
||
|
var o = [-1];
|
||
|
var a = o[++o];
|
||
|
return a;
|
||
|
}
|
||
|
|
||
|
shouldBe("bracket_test1()", "-1");
|
||
|
|
||
|
function bracket_test2()
|
||
|
{
|
||
|
var o = [1];
|
||
|
var a = o[--o];
|
||
|
return a;
|
||
|
}
|
||
|
|
||
|
shouldBe("bracket_test2()", "1");
|
||
|
|
||
|
function bracket_test3()
|
||
|
{
|
||
|
var o = [0];
|
||
|
var a = o[o++];
|
||
|
return a;
|
||
|
}
|
||
|
|
||
|
shouldBe("bracket_test3()", "0");
|
||
|
|
||
|
function bracket_test4()
|
||
|
{
|
||
|
var o = [0];
|
||
|
var a = o[o--];
|
||
|
return a;
|
||
|
}
|
||
|
|
||
|
shouldBe("bracket_test4()", "0");
|
||
|
|
||
|
function bracket_test5()
|
||
|
{
|
||
|
var o = [1];
|
||
|
var a = o[o ^= 1];
|
||
|
return a;
|
||
|
}
|
||
|
|
||
|
shouldBe("bracket_test5()", "1");
|
||
|
|
||
|
function bracket_test6()
|
||
|
{
|
||
|
var o = { b: 1 }
|
||
|
var b = o[o = { b: 2 }, "b"];
|
||
|
return b;
|
||
|
}
|
||
|
|
||
|
shouldBe("bracket_test6()", "1");
|
||
|
|
||
|
function mult_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a * (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBe("mult_test1()", "2");
|
||
|
|
||
|
function mult_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a * ++a;
|
||
|
}
|
||
|
|
||
|
shouldBe("mult_test2()", "2");
|
||
|
|
||
|
function mult_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a * (a += 1);
|
||
|
}
|
||
|
|
||
|
shouldBe("mult_test3()", "2");
|
||
|
|
||
|
function div_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a / (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBe("div_test1()", "0.5");
|
||
|
|
||
|
function div_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a / ++a;
|
||
|
}
|
||
|
|
||
|
shouldBe("div_test2()", "0.5");
|
||
|
|
||
|
function div_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a / (a += 1);
|
||
|
}
|
||
|
|
||
|
shouldBe("div_test3()", "0.5");
|
||
|
|
||
|
function mod_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a % (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBe("mod_test1()", "1");
|
||
|
|
||
|
function mod_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a % ++a;
|
||
|
}
|
||
|
|
||
|
shouldBe("mod_test2()", "1");
|
||
|
|
||
|
function mod_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a % (a += 1);
|
||
|
}
|
||
|
|
||
|
shouldBe("mod_test3()", "1");
|
||
|
|
||
|
function add_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a + (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBe("add_test1()", "3");
|
||
|
|
||
|
function add_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a + ++a;
|
||
|
}
|
||
|
|
||
|
shouldBe("add_test2()", "3");
|
||
|
|
||
|
function add_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a + (a += 1);
|
||
|
}
|
||
|
|
||
|
shouldBe("add_test3()", "3");
|
||
|
|
||
|
function sub_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a - (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBe("sub_test1()", "-1");
|
||
|
|
||
|
function sub_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a - ++a;
|
||
|
}
|
||
|
|
||
|
shouldBe("sub_test2()", "-1");
|
||
|
|
||
|
function sub_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a - (a += 1);
|
||
|
}
|
||
|
|
||
|
shouldBe("sub_test3()", "-1");
|
||
|
|
||
|
function lshift_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a << (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBe("lshift_test1()", "4");
|
||
|
|
||
|
function lshift_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a << ++a;
|
||
|
}
|
||
|
|
||
|
shouldBe("lshift_test2()", "4");
|
||
|
|
||
|
function lshift_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a << (a += 1);
|
||
|
}
|
||
|
|
||
|
shouldBe("lshift_test3()", "4");
|
||
|
|
||
|
function rshift_test1()
|
||
|
{
|
||
|
var a = 4;
|
||
|
return a >> (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBe("rshift_test1()", "1");
|
||
|
|
||
|
function rshift_test2()
|
||
|
{
|
||
|
var a = 2;
|
||
|
return a >> --a;
|
||
|
}
|
||
|
|
||
|
shouldBe("rshift_test2()", "1");
|
||
|
|
||
|
function rshift_test3()
|
||
|
{
|
||
|
var a = 2;
|
||
|
return a >> (a -= 1);
|
||
|
}
|
||
|
|
||
|
shouldBe("rshift_test3()", "1");
|
||
|
|
||
|
function urshift_test1()
|
||
|
{
|
||
|
var a = 4;
|
||
|
return a >>> (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBe("urshift_test1()", "1");
|
||
|
|
||
|
function urshift_test2()
|
||
|
{
|
||
|
var a = 2;
|
||
|
return a >>> --a;
|
||
|
}
|
||
|
|
||
|
shouldBe("urshift_test2()", "1");
|
||
|
|
||
|
function urshift_test3()
|
||
|
{
|
||
|
var a = 2;
|
||
|
return a >>> (a -= 1);
|
||
|
}
|
||
|
|
||
|
shouldBe("urshift_test3()", "1");
|
||
|
|
||
|
function less_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a < (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("less_test1()");
|
||
|
|
||
|
function less_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a < ++a;
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("less_test2()");
|
||
|
|
||
|
function less_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a < (a += 1);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("less_test3()");
|
||
|
|
||
|
function greater_test1()
|
||
|
{
|
||
|
var a = 2;
|
||
|
return a > (a = 1);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("greater_test1()");
|
||
|
|
||
|
function greater_test2()
|
||
|
{
|
||
|
var a = 2;
|
||
|
return a > --a;
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("greater_test2()");
|
||
|
|
||
|
function greater_test3()
|
||
|
{
|
||
|
var a = 2;
|
||
|
return a > (a -= 1);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("greater_test3()");
|
||
|
|
||
|
function lesseq_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a <= (a = 3, 2);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("lesseq_test1()");
|
||
|
|
||
|
function lesseq_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a <= (++a, 1);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("lesseq_test2()");
|
||
|
|
||
|
function lesseq_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a <= (a += 1, 1);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("lesseq_test3()");
|
||
|
|
||
|
function greatereq_test1()
|
||
|
{
|
||
|
var a = 2;
|
||
|
return a >= (a = 1, 2);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("greatereq_test1()");
|
||
|
|
||
|
function greatereq_test2()
|
||
|
{
|
||
|
var a = 2;
|
||
|
return a >= (--a, 2);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("greatereq_test2()");
|
||
|
|
||
|
function greatereq_test3()
|
||
|
{
|
||
|
var a = 2;
|
||
|
return a >= (a -= 1, 2);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("greatereq_test3()");
|
||
|
|
||
|
function instanceof_test1()
|
||
|
{
|
||
|
var a = { };
|
||
|
return a instanceof (a = 1, Object);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("instanceof_test1()");
|
||
|
|
||
|
function instanceof_test2()
|
||
|
{
|
||
|
var a = { valueOf: function() { return 1; } };
|
||
|
return a instanceof (++a, Object);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("instanceof_test2()");
|
||
|
|
||
|
function instanceof_test3()
|
||
|
{
|
||
|
var a = { valueOf: function() { return 1; } };
|
||
|
return a instanceof (a += 1, Object);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("instanceof_test3()");
|
||
|
|
||
|
function in_test1()
|
||
|
{
|
||
|
var a = "a";
|
||
|
return a in (a = "b", { a: 1 });
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("in_test1()");
|
||
|
|
||
|
function in_test2()
|
||
|
{
|
||
|
var a = { toString: function() { return "a"; }, valueOf: function() { return 1; } };
|
||
|
return a in (++a, { a: 1 });
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("in_test2()");
|
||
|
|
||
|
function in_test3()
|
||
|
{
|
||
|
var a = { toString: function() { return "a"; }, valueOf: function() { return 1; } };
|
||
|
return a in (a += 1, { a: 1 });
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("in_test3()");
|
||
|
|
||
|
function eq_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a == (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBeFalse("eq_test1()");
|
||
|
|
||
|
function eq_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a == ++a;
|
||
|
}
|
||
|
|
||
|
shouldBeFalse("eq_test2()");
|
||
|
|
||
|
function eq_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a == (a += 1);
|
||
|
}
|
||
|
|
||
|
shouldBeFalse("eq_test3()");
|
||
|
|
||
|
function neq_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a != (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("neq_test1()");
|
||
|
|
||
|
function neq_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a != ++a;
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("neq_test2()");
|
||
|
|
||
|
function neq_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a != (a += 1);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("neq_test3()");
|
||
|
|
||
|
function stricteq_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a === (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBeFalse("stricteq_test1()");
|
||
|
|
||
|
function stricteq_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a === ++a;
|
||
|
}
|
||
|
|
||
|
shouldBeFalse("stricteq_test2()");
|
||
|
|
||
|
function stricteq_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a === (a += 1);
|
||
|
}
|
||
|
|
||
|
shouldBeFalse("stricteq_test3()");
|
||
|
|
||
|
function nstricteq_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a !== (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("nstricteq_test1()");
|
||
|
|
||
|
function nstricteq_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a !== ++a;
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("nstricteq_test2()");
|
||
|
|
||
|
function nstricteq_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a !== (a += 1);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("nstricteq_test3()");
|
||
|
|
||
|
function bitand_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a & (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBe("bitand_test1()", "0");
|
||
|
|
||
|
function bitand_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a & ++a;
|
||
|
}
|
||
|
|
||
|
shouldBe("bitand_test2()", "0");
|
||
|
|
||
|
function bitand_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a & (a += 1);
|
||
|
}
|
||
|
|
||
|
shouldBe("bitand_test3()", "0");
|
||
|
|
||
|
function bitor_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a | (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBe("bitor_test1()", "3");
|
||
|
|
||
|
function bitor_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a | ++a;
|
||
|
}
|
||
|
|
||
|
shouldBe("bitor_test2()", "3");
|
||
|
|
||
|
function bitor_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a | (a += 1);
|
||
|
}
|
||
|
|
||
|
shouldBe("bitor_test3()", "3");
|
||
|
|
||
|
function bitxor_test1()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a ^ (a = 2);
|
||
|
}
|
||
|
|
||
|
shouldBe("bitxor_test1()", "3");
|
||
|
|
||
|
function bitxor_test2()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a ^ ++a;
|
||
|
}
|
||
|
|
||
|
shouldBe("bitxor_test2()", "3");
|
||
|
|
||
|
function bitxor_test3()
|
||
|
{
|
||
|
var a = 1;
|
||
|
return a ^ (a += 1);
|
||
|
}
|
||
|
|
||
|
shouldBe("bitxor_test3()", "3");
|
||
|
|
||
|
function switch_test1_helper(a, b)
|
||
|
{
|
||
|
switch (a) {
|
||
|
case b:
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return b;
|
||
|
}
|
||
|
|
||
|
function switch_test1()
|
||
|
{
|
||
|
return switch_test1_helper(0, 1) == 1;
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("switch_test1()");
|
||
|
|
||
|
function switch_test2_helper(a, b)
|
||
|
{
|
||
|
var c = b;
|
||
|
switch (a) {
|
||
|
case c:
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return c;
|
||
|
}
|
||
|
|
||
|
function switch_test2()
|
||
|
{
|
||
|
return switch_test2_helper(0, 1) == 1;
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("switch_test2()");
|
||
|
|
||
|
function switch_test3_helper(a)
|
||
|
{
|
||
|
switch (a) {
|
||
|
case this:
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
function switch_test3()
|
||
|
{
|
||
|
return this == switch_test3_helper.call(this, 0);
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("switch_test3()");
|
||
|
|
||
|
function construct_test()
|
||
|
{
|
||
|
var c = [function(a) { this.a = a; }];
|
||
|
|
||
|
function f()
|
||
|
{
|
||
|
return new c[0](true);
|
||
|
}
|
||
|
|
||
|
return f().a;
|
||
|
}
|
||
|
|
||
|
shouldBeTrue("construct_test()");
|
||
|
var testStr = "[";
|
||
|
for (var i = 0; i < 64; i++)
|
||
|
testStr += "(0/0), ";
|
||
|
testStr += "].length";
|
||
|
shouldBe(testStr, "64");
|