Index: test/js-perf-test/SpreadCalls/spreadcalls.js |
diff --git a/test/js-perf-test/SpreadCalls/spreadcalls.js b/test/js-perf-test/SpreadCalls/spreadcalls.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..794c53f237e6357358aa98e304e4b64733f88b76 |
--- /dev/null |
+++ b/test/js-perf-test/SpreadCalls/spreadcalls.js |
@@ -0,0 +1,77 @@ |
+// Copyright 2014 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. |
+ |
+new BenchmarkSuite('Call', [1000], [ |
+ new Benchmark('Call-Sum', false, false, 0, |
+ CallSum, CallSumSetup, |
+ CallSumTearDown), |
+]); |
+ |
+new BenchmarkSuite('CallMethod', [1000], [ |
+ new Benchmark('CallMethod-Sum', false, false, 0, |
+ CallMethodSum, CallSumSetup, CallMethodSumTearDown), |
+]); |
+ |
+new BenchmarkSuite('CallNew', [1000], [ |
+ new Benchmark('CallNew-Sum', false, false, 0, |
+ CallNewSum, CallSumSetup, |
+ CallNewSumTearDown), |
+]); |
+ |
+var result; |
+var objectToSpread; |
+ |
+function sum() { |
+ var result = arguments[0]; |
+ for (var i = 1; i < arguments.length; ++i) { |
+ result += arguments[i]; |
+ } |
+ return result; |
+} |
+ |
+function CallSumSetup() { |
+ result = undefined; |
+ objectToSpread = []; |
+ for (var i = 0; i < 100; ++i) objectToSpread.push(i + 1); |
+} |
+ |
+function CallSum() { |
+ result = sum(...objectToSpread); |
+} |
+ |
+function CallSumTearDown() { |
+ var expected = 100 * (100 + 1) / 2; |
+ return result === expected; |
+} |
+ |
+// ---------------------------------------------------------------------------- |
+ |
+var O = { sum: sum }; |
+function CallMethodSum() { |
+ result = O.sum(...objectToSpread); |
+} |
+ |
+function CallMethodSumTearDown() { |
+ var expected = 100 * (100 + 1) / 2; |
+ return result === expected; |
+} |
+ |
+// ---------------------------------------------------------------------------- |
+ |
+function Sum() { |
+ var result = arguments[0]; |
+ for (var i = 1; i < arguments.length; ++i) { |
+ result += arguments[i]; |
+ } |
+ return this.sum = result; |
+} |
+ |
+function CallNewSum() { |
+ result = new Sum(...objectToSpread); |
+} |
+ |
+function CallNewSumTearDown() { |
+ var expected = 100 * (100 + 1) / 2; |
+ return result instanceof Sum && result.sum === expected; |
+} |