v8/test/mjsunit/optimized-includes-polymorph.js

119 lines
2.8 KiB
JavaScript
Raw Normal View History

// 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)