summaryrefslogtreecommitdiff
path: root/benchmark/es
diff options
context:
space:
mode:
authorJames M Snell <jasnell@gmail.com>2016-04-15 09:25:58 -0700
committerJames M Snell <jasnell@gmail.com>2016-04-20 14:57:51 -0700
commit7dc1a87a7b2ac8be34aa1e74643766cdc90c82d4 (patch)
tree8925c3f3a7eab15dea89290f92bda4b709f8f38d /benchmark/es
parentcb9eff2f93731b03a7d7138eee3919243a0cfd69 (diff)
downloadandroid-node-v8-7dc1a87a7b2ac8be34aa1e74643766cdc90c82d4.tar.gz
android-node-v8-7dc1a87a7b2ac8be34aa1e74643766cdc90c82d4.tar.bz2
android-node-v8-7dc1a87a7b2ac8be34aa1e74643766cdc90c82d4.zip
benchmarks: add microbenchmarks for new ES6 features
Adds new microbenchmarks for destructuring, rest params and default params. PR-URL: https://github.com/nodejs/node/pull/6222 Reviewed-By: Brian White <mscdex@mscdex.net>
Diffstat (limited to 'benchmark/es')
-rw-r--r--benchmark/es/defaultparams-bench.js58
-rw-r--r--benchmark/es/destructuring-bench.js50
-rw-r--r--benchmark/es/restparams-bench.js85
3 files changed, 193 insertions, 0 deletions
diff --git a/benchmark/es/defaultparams-bench.js b/benchmark/es/defaultparams-bench.js
new file mode 100644
index 0000000000..1b962cfb39
--- /dev/null
+++ b/benchmark/es/defaultparams-bench.js
@@ -0,0 +1,58 @@
+'use strict';
+
+const common = require('../common.js');
+const assert = require('assert');
+
+const bench = common.createBenchmark(main, {
+ method: ['withoutdefaults', 'withdefaults'],
+ millions: [100]
+});
+
+function oldStyleDefaults(x, y) {
+ x = x || 1;
+ y = y || 2;
+ assert.strictEqual(x, 1);
+ assert.strictEqual(y, 2);
+}
+
+function defaultParams(x = 1, y = 2) {
+ assert.strictEqual(x, 1);
+ assert.strictEqual(y, 2);
+}
+
+function runOldStyleDefaults(n) {
+
+ common.v8ForceOptimization(oldStyleDefaults);
+
+ var i = 0;
+ bench.start();
+ for (; i < n; i++)
+ oldStyleDefaults();
+ bench.end(n / 1e6);
+}
+
+function runDefaultParams(n) {
+
+ common.v8ForceOptimization(defaultParams);
+
+ var i = 0;
+ bench.start();
+ for (; i < n; i++)
+ defaultParams();
+ bench.end(n / 1e6);
+}
+
+function main(conf) {
+ const n = +conf.millions * 1e6;
+
+ switch (conf.method) {
+ case 'withoutdefaults':
+ runOldStyleDefaults(n);
+ break;
+ case 'withdefaults':
+ runDefaultParams(n);
+ break;
+ default:
+ throw new Error('Unexpected method');
+ }
+}
diff --git a/benchmark/es/destructuring-bench.js b/benchmark/es/destructuring-bench.js
new file mode 100644
index 0000000000..0e9b5e93f3
--- /dev/null
+++ b/benchmark/es/destructuring-bench.js
@@ -0,0 +1,50 @@
+'use strict';
+
+const common = require('../common.js');
+const assert = require('assert');
+
+const bench = common.createBenchmark(main, {
+ method: ['swap', 'destructure'],
+ millions: [100]
+});
+
+function runSwapManual(n) {
+ var i = 0, x, y, r;
+ bench.start();
+ for (; i < n; i++) {
+ x = 1, y = 2;
+ r = x;
+ x = y;
+ y = r;
+ assert.strictEqual(x, 2);
+ assert.strictEqual(y, 1);
+ }
+ bench.end(n / 1e6);
+}
+
+function runSwapDestructured(n) {
+ var i = 0, x, y;
+ bench.start();
+ for (; i < n; i++) {
+ x = 1, y = 2;
+ [x, y] = [y, x];
+ assert.strictEqual(x, 2);
+ assert.strictEqual(y, 1);
+ }
+ bench.end(n / 1e6);
+}
+
+function main(conf) {
+ const n = +conf.millions * 1e6;
+
+ switch (conf.method) {
+ case 'swap':
+ runSwapManual(n);
+ break;
+ case 'destructure':
+ runSwapDestructured(n);
+ break;
+ default:
+ throw new Error('Unexpected method');
+ }
+}
diff --git a/benchmark/es/restparams-bench.js b/benchmark/es/restparams-bench.js
new file mode 100644
index 0000000000..0ff9c48ded
--- /dev/null
+++ b/benchmark/es/restparams-bench.js
@@ -0,0 +1,85 @@
+'use strict';
+
+const common = require('../common.js');
+const assert = require('assert');
+
+const bench = common.createBenchmark(main, {
+ method: ['copy', 'rest', 'arguments'],
+ millions: [100]
+});
+
+function copyArguments() {
+ var len = arguments.length;
+ var args = new Array(len);
+ for (var i = 0; i < len; i++)
+ args[i] = arguments[i];
+ assert.strictEqual(args[0], 1);
+ assert.strictEqual(args[1], 2);
+ assert.strictEqual(args[2], 'a');
+ assert.strictEqual(args[3], 'b');
+}
+
+function restArguments(...args) {
+ assert.strictEqual(args[0], 1);
+ assert.strictEqual(args[1], 2);
+ assert.strictEqual(args[2], 'a');
+ assert.strictEqual(args[3], 'b');
+}
+
+function useArguments() {
+ assert.strictEqual(arguments[0], 1);
+ assert.strictEqual(arguments[1], 2);
+ assert.strictEqual(arguments[2], 'a');
+ assert.strictEqual(arguments[3], 'b');
+}
+
+function runCopyArguments(n) {
+
+ common.v8ForceOptimization(copyArguments, 1, 2, 'a', 'b');
+
+ var i = 0;
+ bench.start();
+ for (; i < n; i++)
+ copyArguments(1, 2, 'a', 'b');
+ bench.end(n / 1e6);
+}
+
+function runRestArguments(n) {
+
+ common.v8ForceOptimization(restArguments, 1, 2, 'a', 'b');
+
+ var i = 0;
+ bench.start();
+ for (; i < n; i++)
+ restArguments(1, 2, 'a', 'b');
+ bench.end(n / 1e6);
+}
+
+function runUseArguments(n) {
+
+ common.v8ForceOptimization(useArguments, 1, 2, 'a', 'b');
+
+ var i = 0;
+ bench.start();
+ for (; i < n; i++)
+ useArguments(1, 2, 'a', 'b');
+ bench.end(n / 1e6);
+}
+
+function main(conf) {
+ const n = +conf.millions * 1e6;
+
+ switch (conf.method) {
+ case 'copy':
+ runCopyArguments(n);
+ break;
+ case 'rest':
+ runRestArguments(n);
+ break;
+ case 'arguments':
+ runUseArguments(n);
+ break;
+ default:
+ throw new Error('Unexpected method');
+ }
+}