Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. ======== node v9.0.0
  3. N = 1000
  4. native x 61,178 ops/sec ±0.51% (89 runs sampled)
  5. mapSet x 188,040 ops/sec ±0.27% (97 runs sampled)
  6. mapSetCurried x 175,525 ops/sec ±0.20% (96 runs sampled)
  7. mapSetAlloc x 558,721 ops/sec ±0.41% (95 runs sampled)
  8. mapSetAllocCurried x 564,505 ops/sec ±0.27% (98 runs sampled)
  9. mapPush x 160,063 ops/sec ±0.49% (93 runs sampled)
  10. mapPushCurried x 149,347 ops/sec ±1.67% (88 runs sampled)
  11. mapPushAlloc x 119,535 ops/sec ±2.30% (82 runs sampled)
  12. mapPushAllocCurried x 132,608 ops/sec ±1.37% (85 runs sampled)
  13. imapPush x 90,595 ops/sec ±1.32% (87 runs sampled)
  14. imapPushCurried x 95,622 ops/sec ±0.55% (92 runs sampled)
  15. imapPushAlloc x 95,196 ops/sec ±0.88% (89 runs sampled)
  16. imapPushAllocCurried x 93,402 ops/sec ±0.48% (92 runs sampled)
  17. imapSet x 52,422 ops/sec ±0.63% (92 runs sampled)
  18. imapSetCurried x 52,629 ops/sec ±0.37% (94 runs sampled)
  19. imapSetAlloc x 74,111 ops/sec ±0.55% (95 runs sampled)
  20. imapSetAllocCurried x 74,296 ops/sec ±0.35% (93 runs sampled)
  21. Fastest is mapSetAllocCurried
  22. */
  23.  
  24.  
  25.  
  26. 'use strict';
  27.  
  28. const Benchmark = require('benchmark');
  29.  
  30. const N = process.argv[2] || 1000;
  31.  
  32. const suite = new Benchmark.Suite;
  33.  
  34. const list = new Array(N);
  35.  
  36. for (let i = 0; i < N; ++i) {
  37.     list[i] = Math.random();
  38. }
  39.  
  40. function mapper(x) {
  41.     return x + 1;
  42. }
  43.  
  44. function mapPush(list, fn) {
  45.     const l = list.length;
  46.     const result = [];
  47.  
  48.     for (let i = 0; i < l; ++i) {
  49.         result.push(fn(list[i]));
  50.     }
  51.  
  52.     return result;
  53. }
  54.  
  55. function mapPushAlloc(list, fn) {
  56.     const l = list.length;
  57.     const result = new Array(l);
  58.  
  59.     for (let i = 0; i < l; ++i) {
  60.         result.push(fn(list[i]));
  61.     }
  62.  
  63.     return result;
  64. }
  65.  
  66. function mapSet(list, fn) {
  67.     const l = list.length;
  68.     const result = [];
  69.  
  70.     for (let i = 0; i < l; ++i) {
  71.         result[i] = fn(list[i]);
  72.     }
  73.  
  74.     return result;
  75. }
  76.  
  77. function mapSetAlloc(list, fn) {
  78.     const l = list.length;
  79.     const result = new Array(l);
  80.  
  81.     for (let i = 0; i < l; ++i) {
  82.         result[i] = fn(list[i]);
  83.     }
  84.  
  85.     return result;
  86. }
  87.  
  88. function imapPush(list, fn) {
  89.     const result = [];
  90.  
  91.     for (const item of list) {
  92.         result.push(fn(item));
  93.     }
  94.  
  95.     return result;
  96. }
  97.  
  98. function imapPushAlloc(list, fn) {
  99.     const result = new Array(list.length);
  100.  
  101.     for (const item of list) {
  102.         result.push(fn(item));
  103.     }
  104.  
  105.     return result;
  106. }
  107.  
  108. function imapSet(list, fn) {
  109.     const result = [];
  110.  
  111.     for (const [idx, item] of list.entries()) {
  112.         result[idx] = fn(item);
  113.     }
  114.  
  115.     return result;
  116. }
  117.  
  118. function imapSetAlloc(list, fn) {
  119.     const result = new Array(list.length);
  120.  
  121.     for (const [idx, item] of list.entries()) {
  122.         result[idx] = fn(item);
  123.     }
  124.  
  125.     return result;
  126. }
  127.  
  128. function curry2(fn) {
  129.     return y => x => fn(x, y);
  130. }
  131.  
  132. const mapSetCurried = curry2(mapSet);
  133. const mapSetAllocCurried = curry2(mapSetAlloc);
  134. const mapPushCurried = curry2(mapPush);
  135. const mapPushAllocCurried = curry2(mapPushAlloc);
  136. const imapPushCurried = curry2(imapPush);
  137. const imapPushAllocCurried = curry2(imapPushAlloc);
  138. const imapSetCurried = curry2(imapSet);
  139. const imapSetAllocCurried = curry2(imapSetAlloc);
  140.  
  141. console.log(`N = ${N}`);
  142.  
  143. suite
  144.     .add('native', () => list.map(mapper))
  145.     .add('mapSet', () => mapSet(list, mapper))
  146.     .add('mapSetCurried', () => mapSetCurried(mapper)(list))
  147.     .add('mapSetAlloc', () => mapSetAlloc(list, mapper))
  148.     .add('mapSetAllocCurried', () => mapSetAllocCurried(mapper)(list))
  149.     .add('mapPush', () => mapPush(list, mapper))
  150.     .add('mapPushCurried', () => mapPushCurried(mapper)(list))
  151.     .add('mapPushAlloc', () => mapPushAlloc(list, mapper))
  152.     .add('mapPushAllocCurried', () => mapPushAllocCurried(mapper)(list))
  153.     .add('imapPush', () => imapPush(list, mapper))
  154.     .add('imapPushCurried', () => imapPushCurried(mapper)(list))
  155.     .add('imapPushAlloc', () => imapPushAlloc(list, mapper))
  156.     .add('imapPushAllocCurried', () => imapPushAllocCurried(mapper)(list))
  157.     .add('imapSet', () => imapSet(list, mapper))
  158.     .add('imapSetCurried', () => imapSetCurried(mapper)(list))
  159.     .add('imapSetAlloc', () => imapSetAlloc(list, mapper))
  160.     .add('imapSetAllocCurried', () => imapSetAllocCurried(mapper)(list))
  161.     .on('cycle', function (event) {
  162.         console.log(String(event.target));
  163.     })
  164.     .on('complete', function () {
  165.         console.log('Fastest is ' + this.filter('fastest').map('name'));
  166.     })
  167.     .run();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement