aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/test/js-perf-test/ObjectFreeze/spread-call.js
blob: ec1cd5d277f2a09c25f726c33961b15c46abc206 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// 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.

function setupArray(length) {
  var a = new Array(length);
  for (var i=0;i<length;i++) {
    a[i] = ''+i;
  }
  return Object.freeze(a);
}

const frozenSpreadArray = setupArray(100);

function foo() {
  var result = arguments[0];
  for (var i = 1; i < arguments.length; ++i) {
    result += arguments[i];
  }
  return result;
}

// ----------------------------------------------------------------------------
// Benchmark: SpreadCall
// ----------------------------------------------------------------------------

function SpreadCall() {
  foo(...frozenSpreadArray);
}


// ----------------------------------------------------------------------------
// Benchmark: SpreadCallSpreadLiteral
// ----------------------------------------------------------------------------

function SpreadCallSpreadLiteral() {
  foo(...[...frozenSpreadArray]);
}


// ----------------------------------------------------------------------------
// Benchmark: ApplySpreadLiteral
// ----------------------------------------------------------------------------

function ApplySpreadLiteral() {
  foo.apply(this, [...frozenSpreadArray]);
}

// ----------------------------------------------------------------------------
// Setup and Run
// ----------------------------------------------------------------------------

function CreateBenchmark(name, f) {
  new BenchmarkSuite(name, [10], [ new Benchmark(name, false, false, 0, f) ]);
}

CreateBenchmark('ApplySpreadLiteral', ApplySpreadLiteral);
CreateBenchmark('SpreadCall', SpreadCall);
CreateBenchmark('SpreadCallSpreadLiteral', SpreadCallSpreadLiteral);