| // Copyright 2015 the V8 project authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // Flags: --allow-natives-syntax | |
| var undetectable = %GetUndetectable(); | |
| var tests = [ | |
| true, false, | |
| false, false, | |
| null, true, | |
| void 0, true, | |
| 0, false, | |
| 0.0, false, | |
| -0, false, | |
| "", false, | |
| -1, false, | |
| -1.25, false, | |
| 1, false, | |
| 1.25, false, | |
| -2147483648, false, | |
| 2147483648, false, | |
| Infinity, false, | |
| -Infinity, false, | |
| NaN, false | |
| ]; | |
| var func = (function eq(a) { return a == undetectable; }); | |
| var left_funcs = [ | |
| (function eq_L0() { return true == undetectable; }), | |
| (function eq_L1() { return false == undetectable; }), | |
| (function eq_L2() { return null == undetectable; }), | |
| (function eq_L3() { return void 0 == undetectable; }), | |
| (function eq_L4() { return 0 == undetectable; }), | |
| (function eq_L5() { return 0.0 == undetectable; }), | |
| (function eq_L6() { return -0 == undetectable; }), | |
| (function eq_L7() { return "" == undetectable; }), | |
| (function eq_L8() { return -1 == undetectable; }), | |
| (function eq_L9() { return -1.25 == undetectable; }), | |
| (function eq_L10() { return 1 == undetectable; }), | |
| (function eq_L11() { return 1.25 == undetectable; }), | |
| (function eq_L12() { return -2147483648 == undetectable; }), | |
| (function eq_L13() { return 2147483648 == undetectable; }), | |
| (function eq_L14() { return Infinity == undetectable; }), | |
| (function eq_L15() { return -Infinity == undetectable; }), | |
| (function eq_L16() { return NaN == undetectable; }) | |
| ]; | |
| var right_funcs = [ | |
| (function eq_R0() { return undetectable == true; }), | |
| (function eq_R1() { return undetectable == false; }), | |
| (function eq_R2() { return undetectable == null; }), | |
| (function eq_R3() { return undetectable == void 0; }), | |
| (function eq_R4() { return undetectable == 0; }), | |
| (function eq_R5() { return undetectable == 0.0; }), | |
| (function eq_R6() { return undetectable == -0; }), | |
| (function eq_R7() { return undetectable == ""; }), | |
| (function eq_R8() { return undetectable == -1; }), | |
| (function eq_R9() { return undetectable == -1.25; }), | |
| (function eq_R10() { return undetectable == 1; }), | |
| (function eq_R11() { return undetectable == 1.25; }), | |
| (function eq_R12() { return undetectable == -2147483648; }), | |
| (function eq_R13() { return undetectable == 2147483648; }), | |
| (function eq_R14() { return undetectable == Infinity; }), | |
| (function eq_R15() { return undetectable == -Infinity; }), | |
| (function eq_R16() { return undetectable == NaN; }) | |
| ]; | |
| function test() { | |
| for (var i = 0; i < tests.length; i += 2) { | |
| var val = tests[i]; | |
| var eq = tests[i + 1]; | |
| assertEquals(eq, val == undetectable); | |
| assertEquals(eq, undetectable == val); | |
| assertFalse(val === undetectable); | |
| assertFalse(undetectable === val); | |
| assertEquals(eq, left_funcs[i/2]()); | |
| assertEquals(eq, right_funcs[i/2]()); | |
| } | |
| assertTrue(undetectable == undetectable); | |
| assertTrue(undetectable === undetectable); | |
| } | |
| for (var i = 0; i < 5; i++) { | |
| test(); | |
| } | |
| assertFalse(undetectable == %GetUndetectable()); | |
| assertFalse(undetectable === %GetUndetectable()); | |
| function test2(a, b) { | |
| return a == b; | |
| } | |
| test2(0, 1); | |
| test2(undetectable, {}); | |
| %OptimizeFunctionOnNextCall(test2); | |
| for (var i = 0; i < 5; ++i) { | |
| assertFalse(test2(undetectable, %GetUndetectable())); | |
| } |