Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ======== node v9.0.0
- N = 1000
- native x 61,178 ops/sec ±0.51% (89 runs sampled)
- mapSet x 188,040 ops/sec ±0.27% (97 runs sampled)
- mapSetCurried x 175,525 ops/sec ±0.20% (96 runs sampled)
- mapSetAlloc x 558,721 ops/sec ±0.41% (95 runs sampled)
- mapSetAllocCurried x 564,505 ops/sec ±0.27% (98 runs sampled)
- mapPush x 160,063 ops/sec ±0.49% (93 runs sampled)
- mapPushCurried x 149,347 ops/sec ±1.67% (88 runs sampled)
- mapPushAlloc x 119,535 ops/sec ±2.30% (82 runs sampled)
- mapPushAllocCurried x 132,608 ops/sec ±1.37% (85 runs sampled)
- imapPush x 90,595 ops/sec ±1.32% (87 runs sampled)
- imapPushCurried x 95,622 ops/sec ±0.55% (92 runs sampled)
- imapPushAlloc x 95,196 ops/sec ±0.88% (89 runs sampled)
- imapPushAllocCurried x 93,402 ops/sec ±0.48% (92 runs sampled)
- imapSet x 52,422 ops/sec ±0.63% (92 runs sampled)
- imapSetCurried x 52,629 ops/sec ±0.37% (94 runs sampled)
- imapSetAlloc x 74,111 ops/sec ±0.55% (95 runs sampled)
- imapSetAllocCurried x 74,296 ops/sec ±0.35% (93 runs sampled)
- Fastest is mapSetAllocCurried
- */
- 'use strict';
- const Benchmark = require('benchmark');
- const N = process.argv[2] || 1000;
- const suite = new Benchmark.Suite;
- const list = new Array(N);
- for (let i = 0; i < N; ++i) {
- list[i] = Math.random();
- }
- function mapper(x) {
- return x + 1;
- }
- function mapPush(list, fn) {
- const l = list.length;
- const result = [];
- for (let i = 0; i < l; ++i) {
- result.push(fn(list[i]));
- }
- return result;
- }
- function mapPushAlloc(list, fn) {
- const l = list.length;
- const result = new Array(l);
- for (let i = 0; i < l; ++i) {
- result.push(fn(list[i]));
- }
- return result;
- }
- function mapSet(list, fn) {
- const l = list.length;
- const result = [];
- for (let i = 0; i < l; ++i) {
- result[i] = fn(list[i]);
- }
- return result;
- }
- function mapSetAlloc(list, fn) {
- const l = list.length;
- const result = new Array(l);
- for (let i = 0; i < l; ++i) {
- result[i] = fn(list[i]);
- }
- return result;
- }
- function imapPush(list, fn) {
- const result = [];
- for (const item of list) {
- result.push(fn(item));
- }
- return result;
- }
- function imapPushAlloc(list, fn) {
- const result = new Array(list.length);
- for (const item of list) {
- result.push(fn(item));
- }
- return result;
- }
- function imapSet(list, fn) {
- const result = [];
- for (const [idx, item] of list.entries()) {
- result[idx] = fn(item);
- }
- return result;
- }
- function imapSetAlloc(list, fn) {
- const result = new Array(list.length);
- for (const [idx, item] of list.entries()) {
- result[idx] = fn(item);
- }
- return result;
- }
- function curry2(fn) {
- return y => x => fn(x, y);
- }
- const mapSetCurried = curry2(mapSet);
- const mapSetAllocCurried = curry2(mapSetAlloc);
- const mapPushCurried = curry2(mapPush);
- const mapPushAllocCurried = curry2(mapPushAlloc);
- const imapPushCurried = curry2(imapPush);
- const imapPushAllocCurried = curry2(imapPushAlloc);
- const imapSetCurried = curry2(imapSet);
- const imapSetAllocCurried = curry2(imapSetAlloc);
- console.log(`N = ${N}`);
- suite
- .add('native', () => list.map(mapper))
- .add('mapSet', () => mapSet(list, mapper))
- .add('mapSetCurried', () => mapSetCurried(mapper)(list))
- .add('mapSetAlloc', () => mapSetAlloc(list, mapper))
- .add('mapSetAllocCurried', () => mapSetAllocCurried(mapper)(list))
- .add('mapPush', () => mapPush(list, mapper))
- .add('mapPushCurried', () => mapPushCurried(mapper)(list))
- .add('mapPushAlloc', () => mapPushAlloc(list, mapper))
- .add('mapPushAllocCurried', () => mapPushAllocCurried(mapper)(list))
- .add('imapPush', () => imapPush(list, mapper))
- .add('imapPushCurried', () => imapPushCurried(mapper)(list))
- .add('imapPushAlloc', () => imapPushAlloc(list, mapper))
- .add('imapPushAllocCurried', () => imapPushAllocCurried(mapper)(list))
- .add('imapSet', () => imapSet(list, mapper))
- .add('imapSetCurried', () => imapSetCurried(mapper)(list))
- .add('imapSetAlloc', () => imapSetAlloc(list, mapper))
- .add('imapSetAllocCurried', () => imapSetAllocCurried(mapper)(list))
- .on('cycle', function (event) {
- console.log(String(event.target));
- })
- .on('complete', function () {
- console.log('Fastest is ' + this.filter('fastest').map('name'));
- })
- .run();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement