|  | // Copyright 2017 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 --no-always-opt --no-stress-flush-bytecode | 
|  | // Files: test/mjsunit/code-coverage-utils.js | 
|  |  | 
|  | // Test code coverage without explicitly activating it upfront. | 
|  |  | 
|  | TestCoverageNoGC( | 
|  | "call simple function twice", | 
|  | ` | 
|  | function f() {} | 
|  | f(); | 
|  | f(); | 
|  | `, | 
|  | [{"start":0,"end":25,"count":1}, | 
|  | {"start":0,"end":15,"count":1}] | 
|  | ); | 
|  |  | 
|  | TestCoverageNoGC( | 
|  | "call arrow function twice", | 
|  | ` | 
|  | var f = () => 1; | 
|  | f(); | 
|  | f(); | 
|  | `, | 
|  | [{"start":0,"end":26,"count":1}, | 
|  | {"start":8,"end":15,"count":1}] | 
|  | ); | 
|  |  | 
|  | TestCoverageNoGC( | 
|  | "call nested function", | 
|  | ` | 
|  | function f() { | 
|  | function g() {} | 
|  | g(); | 
|  | g(); | 
|  | } | 
|  | f(); | 
|  | f(); | 
|  | `, | 
|  | [{"start":0,"end":58,"count":1}, | 
|  | {"start":0,"end":48,"count":1}, | 
|  | {"start":17,"end":32,"count":1}] | 
|  | ); | 
|  |  | 
|  | TestCoverageNoGC( | 
|  | "call recursive function", | 
|  | ` | 
|  | function fib(x) { | 
|  | if (x < 2) return 1; | 
|  | return fib(x-1) + fib(x-2); | 
|  | } | 
|  | fib(5); | 
|  | `, | 
|  | [{"start":0,"end":80,"count":1}, | 
|  | {"start":0,"end":72,"count":1}] | 
|  | ); | 
|  |  | 
|  | TestCoverageNoGC( | 
|  | "https://crbug.com/927464", | 
|  | ` | 
|  | !function f() {                           // 0000 | 
|  | function unused() { nop(); }            // 0100 | 
|  | nop();                                  // 0150 | 
|  | }();                                      // 0200 | 
|  | `, | 
|  | [{"start":0,"end":199,"count":1}, | 
|  | {"start":1,"end":151,"count":1} | 
|  | // The unused function is unfortunately not marked as unused in best-effort | 
|  | // code coverage, as the information about its source range is discarded | 
|  | // entirely. | 
|  | ] | 
|  | ); |