diff options
author | Rod Vagg <rod@vagg.org> | 2016-07-07 16:31:19 +1000 |
---|---|---|
committer | Rod Vagg <rod@vagg.org> | 2016-10-29 18:04:42 +1100 |
commit | 07cc9dfd05fa49e0b33b1b4dd74a36138f954e96 (patch) | |
tree | a35906aa6749402556a964557f45d117c004294a /benchmark/es | |
parent | 2c6ca32e8bcc6759a704bb525df71ac7b3b151ca (diff) | |
download | android-node-v8-07cc9dfd05fa49e0b33b1b4dd74a36138f954e96.tar.gz android-node-v8-07cc9dfd05fa49e0b33b1b4dd74a36138f954e96.tar.bz2 android-node-v8-07cc9dfd05fa49e0b33b1b4dd74a36138f954e96.zip |
benchmark: add microbenchmarks for ES Map
PR-URL: https://github.com/nodejs/node/pull/7581
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Franziska Hinkelmann <ranziska.hinkelmann@gmail.com>
Diffstat (limited to 'benchmark/es')
-rw-r--r-- | benchmark/es/map-bench.js | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/benchmark/es/map-bench.js b/benchmark/es/map-bench.js new file mode 100644 index 0000000000..574da25d53 --- /dev/null +++ b/benchmark/es/map-bench.js @@ -0,0 +1,96 @@ +'use strict'; + +const common = require('../common.js'); +const assert = require('assert'); + +const bench = common.createBenchmark(main, { + method: ['object', 'nullProtoObject', 'fakeMap', 'map'], + millions: [1] +}); + +function runObject(n) { + const m = {}; + var i = 0; + bench.start(); + for (; i < n; i++) { + m['i' + i] = i; + m['s' + i] = String(i); + assert.equal(m['i' + i], m['s' + i]); + m['i' + i] = undefined; + m['s' + i] = undefined; + } + bench.end(n / 1e6); +} + +function runNullProtoObject(n) { + const m = Object.create(null); + var i = 0; + bench.start(); + for (; i < n; i++) { + m['i' + i] = i; + m['s' + i] = String(i); + assert.equal(m['i' + i], m['s' + i]); + m['i' + i] = undefined; + m['s' + i] = undefined; + } + bench.end(n / 1e6); +} + +function fakeMap() { + const m = {}; + return { + get(key) { return m['$' + key]; }, + set(key, val) { m['$' + key] = val; }, + get size() { return Object.keys(m).length; }, + has(key) { return Object.prototype.hasOwnProperty.call(m, '$' + key); } + }; +} + +function runFakeMap(n) { + const m = fakeMap(); + var i = 0; + bench.start(); + for (; i < n; i++) { + m.set('i' + i, i); + m.set('s' + i, String(i)); + assert.equal(m.get('i' + i), m.get('s' + i)); + m.set('i' + i, undefined); + m.set('s' + i, undefined); + } + bench.end(n / 1e6); +} + +function runMap(n) { + const m = new Map(); + var i = 0; + bench.start(); + for (; i < n; i++) { + m.set('i' + i, i); + m.set('s' + i, String(i)); + assert.equal(m.get('i' + i), m.get('s' + i)); + m.set('i' + i, undefined); + m.set('s' + i, undefined); + } + bench.end(n / 1e6); +} + +function main(conf) { + const n = +conf.millions * 1e6; + + switch (conf.method) { + case 'object': + runObject(n); + break; + case 'nullProtoObject': + runNullProtoObject(n); + break; + case 'fakeMap': + runFakeMap(n); + break; + case 'map': + runMap(n); + break; + default: + throw new Error('Unexpected method'); + } +} |