// 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())); }