// Copyright 2019 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 o1 = {}; var o2 = {}; var a = [0, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,0,0]; var b = [,,,,,2,3,4]; var c = [o1, o2]; var d = [,,, o2, o1]; var e = [0.5,3,4]; var f = [,,,,0.5,3,4]; function checkIncludes(ary, value) { return ary.includes(value) } function checkIndexOf(ary, value, expected) { return ary.indexOf(value) == expected; } function expectIncludes(ary, value) { assertTrue(checkIncludes(ary, value)); } function expectNotIncludes(ary, value) { assertFalse(checkIncludes(ary, value)); } function expectIndexOf(ary, value, expected) { assertTrue(checkIndexOf(ary, value, expected)); } var testIncludes = { polymorphic: function() { expectIncludes(a, 21); expectIncludes(b, 4); expectIncludes(c, o2); expectIncludes(d, o1); expectNotIncludes(a, o1); expectNotIncludes(b, o2); expectNotIncludes(c, 3); expectNotIncludes(d, 4); }, polymorphicDouble: function() { expectIncludes(e, 3); expectIncludes(f, 0.5); expectNotIncludes(e, 10); expectNotIncludes(f, 0.25); }, polymorphicMixed: function() { expectIncludes(a, 21); expectIncludes(b, 4); expectIncludes(c, o2); expectIncludes(d, o1); expectIncludes(e, 3); expectIncludes(f, 0.5); expectNotIncludes(a, o1); expectNotIncludes(b, o2); expectNotIncludes(c, 3); expectNotIncludes(d, 4); expectNotIncludes(e, 10); expectNotIncludes(f, 0.25); }, }; var testIndexOf = { polymorphic: function() { expectIndexOf(a, 21, 21); expectIndexOf(b, 4, 7); expectIndexOf(c, o2, 1); expectIndexOf(d, o1, 4); expectIndexOf(a, o1, -1); expectIndexOf(b, o2, -1); expectIndexOf(c, 3, -1); expectIndexOf(d, 4, -1); }, polymorphicDouble: function() { expectIndexOf(e, 3, 1); expectIndexOf(f, 0.5, 4); expectIndexOf(e, 10, -1); expectIndexOf(f, 0.25, -1); }, polymorphicMixed: function() { expectIndexOf(a, 21, 21); expectIndexOf(b, 4, 7); expectIndexOf(c, o2, 1); expectIndexOf(d, o1, 4); expectIndexOf(e, 3, 1); expectIndexOf(f, 0.5, 4); expectIndexOf(a, o1, -1); expectIndexOf(b, o2, -1); expectIndexOf(c, 3, -1); expectIndexOf(d, 4, -1); expectIndexOf(e, 10, -1); expectIndexOf(f, 0.25, -1); }, }; function runTests(tests, func) { for (test in tests) { %DeoptimizeFunction(func); %ClearFunctionFeedback(func); %PrepareFunctionForOptimization(func); tests[test](); %OptimizeFunctionOnNextCall(func); tests[test](); } } runTests(testIncludes, checkIncludes) runTests(testIndexOf, checkIndexOf)