v8/test/mjsunit/undetectable-compare.js
bmeurer 679d9503cf [undetectable] Really get comparisons of document.all right now.
According to https://www.w3.org/TR/html5/obsolete.html#dom-document-all,
comparisons of document.all to other values such as strings or objects,
are unaffected. In fact document.all only gets special treatment in
comparisons with null or undefined according to HTML. Especially setting
the undetectable doesn't make two distinct JSReceivers equal.

R=jarin@chromium.org

Review URL: https://codereview.chromium.org/1774273002

Cr-Commit-Position: refs/heads/master@{#34608}
2016-03-09 10:43:48 +00:00

108 lines
3.4 KiB
JavaScript

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