v8/test/mjsunit/compiler/array-every.js
Z Duong Nguyen-Huu 34e1c07110 Improve test coverage for non-extensible array in optimized code
This cover all test files under mjsunit/compiler/array-*

Bug: v8:6831
Change-Id: I7a5632ccb3895a6e23ebfb92598dd1939de133b1
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1531030
Commit-Queue: Toon Verwaest <verwaest@chromium.org>
Reviewed-by: Toon Verwaest <verwaest@chromium.org>
Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#60484}
2019-03-27 11:08:36 +00:00

44 lines
1.5 KiB
JavaScript

// Copyright 2018 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
// Basic loop peeling test case with Array.prototype.every().
(function() {
function foo(a, o) {
return a.every(x => x === o.x);
}
%PrepareFunctionForOptimization(foo);
assertTrue(foo([3, 3, 3], {x:3}));
assertFalse(foo([3, 3, 2], {x:3}));
%OptimizeFunctionOnNextCall(foo);
assertTrue(foo([3, 3, 3], {x:3}));
assertFalse(foo([3, 3, 2], {x:3}));
// Non-extensible array
%PrepareFunctionForOptimization(foo);
assertTrue(foo(Object.preventExtensions([3, 3, 3]), {x:3}));
assertFalse(foo(Object.preventExtensions([3, 3, 2]), {x:3}));
%OptimizeFunctionOnNextCall(foo);
assertTrue(foo(Object.preventExtensions([3, 3, 3]), {x:3}));
assertFalse(foo(Object.preventExtensions([3, 3, 2]), {x:3}));
// Sealed array
%PrepareFunctionForOptimization(foo);
assertTrue(foo(Object.seal([3, 3, 3]), {x:3}));
assertFalse(foo(Object.seal([3, 3, 2]), {x:3}));
%OptimizeFunctionOnNextCall(foo);
assertTrue(foo(Object.seal([3, 3, 3]), {x:3}));
assertFalse(foo(Object.seal([3, 3, 2]), {x:3}));
// Frozen array
%PrepareFunctionForOptimization(foo);
assertTrue(foo(Object.freeze([3, 3, 3]), {x:3}));
assertFalse(foo(Object.freeze([3, 3, 2]), {x:3}));
%OptimizeFunctionOnNextCall(foo);
assertTrue(foo(Object.freeze([3, 3, 3]), {x:3}));
assertFalse(foo(Object.freeze([3, 3, 2]), {x:3}));
})();