Last active
February 1, 2020 02:19
-
-
Save orodio/51306b6e28d97e7fb4e3919104477113 to your computer and use it in GitHub Desktop.
choose
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// PTS | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
// ----+---------------------------------------------------- | |
// R1 | t6 t12 t4 t8 t5 t14 t11 t10 t13 t1 t2 t9 t3 t7 | |
// R2 | t6 t4 t14 t13 t11 t10 t12 t1 t8 t5 t2 t9 t3 t7 | |
// R3 | t6 t5 t11 t4 t14 t8 t10 t2 t1 t13 t12 t9 t3 t7 | |
// R4 | t6 t5 t4 t10 t12 t11 t13 t8 t14 t2 t1 t9 t3 t7 | |
// R5 | t6 t13 t11 t2 t10 t5 t12 t14 t8 t1 t4 t9 t3 t7 | |
// R6 | t6 t5 t4 t13 t12 t8 t14 t11 t10 t1 t2 t9 t3 t7 | |
// R7 | t6 t5 t13 t8 t4 t10 t1 t2 t14 t11 t12 t3 t9 t7 | |
// R8 | t6 t5 t11 t14 t8 t4 t13 t10 t12 t1 t2 t3 t9 t7 | |
// R9 | t6 t10 t11 t5 t1 t14 t8 t2 t4 t12 t13 t9 t3 t7 | |
// R10 | t6 t5 t12 t14 t8 t4 t13 t11 t10 t1 t2 t3 t9 t7 | |
// ----+---------------------------------------------------- | |
// | t6 t5 t4 t11 t14 t8 t10 t13 t12 t1 t2 t9 t3 t7 | |
// ^ ^ | |
// Best Worst | |
const bench = require("nodemark") | |
const t = (label, fn, ...args) => { | |
const result = bench(() => fn(...args)) | |
console.log(label, result.nanoseconds(), result) | |
} | |
const binA = 0 | |
const binB = 1 | |
const binC = 2 | |
const binIsA = v => v.tag & binA | |
const binIsB = v => v.tag & binB | |
const binIsC = v => v.tag & binC | |
const nonA = "A" | |
const nonB = "B" | |
const nonC = "C" | |
const nonIsA = v => v.tag === nonA | |
const nonIsB = v => v.tag === nonB | |
const nonIsC = v => v.tag === nonC | |
const fn = label => value => [label, value] | |
const binFoo = { | |
tag: binC, | |
foo: "bar", | |
} | |
const nonFoo = { | |
tag: nonC, | |
foo: "bar", | |
} | |
// non - standard switch | |
const t1 = foo => { | |
switch (foo.tag) { | |
case nonA: | |
return fn("A")(foo) | |
case nonB: | |
return fn("B")(foo) | |
case nonC: | |
return fn("C")(foo) | |
} | |
} | |
// non - standard true switch | |
const t2 = foo => { | |
switch (true) { | |
case nonIsA(foo): | |
return fn("A")(foo) | |
case nonIsB(foo): | |
return fn("B")(foo) | |
case nonIsC(foo): | |
return fn("C")(foo) | |
} | |
} | |
// non - inline object | |
const t3 = foo => { | |
const opts = { | |
[nonA]: fn("A"), | |
[nonB]: fn("B"), | |
[nonC]: fn("C"), | |
} | |
return opts[foo.tag](foo) | |
} | |
// non - external object | |
const nonOpts = { | |
[nonA]: fn("A"), | |
[nonB]: fn("B"), | |
[nonC]: fn("C"), | |
} | |
const t4 = foo => { | |
return nonOpts[foo.tag](foo) | |
} | |
// bin - standard switch | |
const t5 = foo => { | |
switch (foo.tag) { | |
case binA: | |
return fn("A")(foo) | |
case binB: | |
return fn("B")(foo) | |
case binC: | |
return fn("C")(foo) | |
} | |
} | |
// bin - standard true switch | |
const t6 = foo => { | |
switch (true) { | |
case binIsA(foo): | |
return fn("A")(foo) | |
case binIsB(foo): | |
return fn("B")(foo) | |
case binIsC(foo): | |
return fn("C")(foo) | |
} | |
} | |
// bin - inline object | |
const t7 = foo => { | |
const opts = { | |
[binA]: fn("A"), | |
[binB]: fn("B"), | |
[binC]: fn("C"), | |
} | |
return opts[foo.tag](foo) | |
} | |
// bin - external object | |
const binOpts = { | |
[binA]: fn("A"), | |
[binB]: fn("B"), | |
[binC]: fn("C"), | |
} | |
const t8 = foo => { | |
return binOpts[foo.tag](foo) | |
} | |
// bin -- array inline | |
const t9 = foo => { | |
const binArr = [fn("A"), fn("B"), fn("C")] | |
return binArr[foo.tag](foo) | |
} | |
// bin -- array external | |
const binArr = [fn("A"), fn("B"), fn("C")] | |
const t10 = foo => { | |
return binArr[foo.tag](foo) | |
} | |
// non -- if | |
const t11 = foo => { | |
if (nonIsA(foo)) return fn("A")(foo) | |
if (nonIsB(foo)) return fn("B")(foo) | |
if (nonIsC(foo)) return fn("C")(foo) | |
} | |
// non -- if else | |
const t12 = foo => { | |
if (nonIsA(foo)) return fn("A")(foo) | |
else if (nonIsB(foo)) return fn("B")(foo) | |
else if (nonIsC(foo)) return fn("C")(foo) | |
} | |
// bin -- if | |
const t13 = foo => { | |
if (binIsA(foo)) return fn("A")(foo) | |
if (binIsB(foo)) return fn("B")(foo) | |
if (binIsC(foo)) return fn("C")(foo) | |
} | |
// bin -- if else | |
const t14 = foo => { | |
if (binIsA(foo)) return fn("A")(foo) | |
else if (binIsB(foo)) return fn("B")(foo) | |
else if (binIsC(foo)) return fn("C")(foo) | |
} | |
t("t1", t1, nonFoo) | |
t("t2", t2, nonFoo) | |
t("t3", t3, nonFoo) | |
t("t4", t4, nonFoo) | |
t("t5", t5, binFoo) | |
t("t6", t6, binFoo) | |
t("t7", t7, binFoo) | |
t("t8", t8, binFoo) | |
t("t9", t9, binFoo) | |
t("t10", t10, binFoo) | |
t("t11", t11, nonFoo) | |
t("t12", t12, nonFoo) | |
t("t13", t13, binFoo) | |
t("t14", t14, binFoo) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Run 1 | |
// t6 10 95,616,182 ops/sec ±3.44% (5606892 samples) | |
// t12 15 67,982,577 ops/sec ±4.05% (5619493 samples) | |
// t4 15 65,920,581 ops/sec ±4.33% (5576717 samples) | |
// t8 15 64,551,179 ops/sec ±4.28% (5614327 samples) | |
// t5 15 65,286,515 ops/sec ±5.33% (5591630 samples) | |
// t14 16 64,124,484 ops/sec ±4.03% (5621866 samples) | |
// t11 16 63,886,856 ops/sec ±4.55% (5517265 samples) | |
// t10 16 63,597,306 ops/sec ±3.9% (5601690 samples) | |
// t13 16 63,534,015 ops/sec ±4.38% (5629404 samples) | |
// t1 16 61,530,462 ops/sec ±4.14% (5583633 samples) | |
// t2 17 58,982,494 ops/sec ±4.36% (5534838 samples) | |
// t9 67 14,852,593 ops/sec ±1.74% (5091493 samples) | |
// t3 68 14,639,564 ops/sec ±1.59% (5103353 samples) | |
// t7 403 2,482,556 ops/sec ±0.45% (3220159 samples) | |
// Run 2 | |
// t6 13 78,253,589 ops/sec ±3.17% (5447466 samples) | |
// t4 15 66,635,312 ops/sec ±4.49% (5385800 samples) | |
// t14 15 65,248,822 ops/sec ±4.56% (5400517 samples) | |
// t13 16 63,709,943 ops/sec ±4.2% (5404798 samples) | |
// t11 16 62,453,636 ops/sec ±4.11% (5431338 samples) | |
// t10 16 62,351,122 ops/sec ±4.8% (5379142 samples) | |
// t12 16 62,041,790 ops/sec ±5.15% (5414844 samples) | |
// t1 16 61,795,603 ops/sec ±4.64% (5364153 samples) | |
// t8 16 61,733,245 ops/sec ±3.85% (5425504 samples) | |
// t5 17 60,183,941 ops/sec ±4.26% (5377451 samples) | |
// t2 17 58,631,932 ops/sec ±4.35% (5427319 samples) | |
// t9 68 14,774,325 ops/sec ±1.7% (4913451 samples) | |
// t3 70 14,211,270 ops/sec ±1.68% (4874387 samples) | |
// t7 404 2,474,727 ops/sec ±0.47% (3140623 samples) | |
// Run 3 | |
// t6 13 78,844,008 ops/sec ±3.27% (5604463 samples) | |
// t5 16 64,291,737 ops/sec ±4.1% (5559322 samples) | |
// t11 16 63,026,717 ops/sec ±4.78% (5568469 samples) | |
// t4 16 63,855,981 ops/sec ±3.85% (5580070 samples) | |
// t14 16 62,010,250 ops/sec ±3.88% (5587206 samples) | |
// t8 16 61,694,044 ops/sec ±4.05% (5563343 samples) | |
// t10 16 61,024,381 ops/sec ±6.64% (5558689 samples) | |
// t2 17 59,253,678 ops/sec ±3.92% (5556373 samples) | |
// t1 17 58,837,419 ops/sec ±5.02% (5509958 samples) | |
// t13 17 58,255,621 ops/sec ±3.74% (5550827 samples) | |
// t12 17 57,652,534 ops/sec ±5.75% (5583893 samples) | |
// t9 65 15,351,754 ops/sec ±1.73% (5070506 samples) | |
// t3 70 14,185,018 ops/sec ±1.63% (5028662 samples) | |
// t7 399 2,504,929 ops/sec ±0.45% (3245039 samples) | |
// Run4 | |
// t6 12 81,730,226 ops/sec ±2.94% (5719964 samples) | |
// t5 14 73,895,227 ops/sec ±4.54% (5682163 samples) | |
// t4 14 72,251,685 ops/sec ±4.45% (5660938 samples) | |
// t10 14 71,184,741 ops/sec ±4.35% (5706315 samples) | |
// t12 14 71,094,997 ops/sec ±4.63% (5625127 samples) | |
// t11 14 70,890,592 ops/sec ±4.88% (5654009 samples) | |
// t13 14 69,988,086 ops/sec ±4.41% (5671990 samples) | |
// t8 14 69,579,334 ops/sec ±5.38% (5662969 samples) | |
// t14 15 68,669,695 ops/sec ±4.3% (5666156 samples) | |
// t2 15 67,936,009 ops/sec ±4.28% (5673873 samples) | |
// t1 15 66,623,769 ops/sec ±4.37% (5654863 samples) | |
// t9 64 15,509,500 ops/sec ±1.96% (5127815 samples) | |
// t3 68 14,683,280 ops/sec ±1.74% (5122542 samples) | |
// t7 399 2,506,734 ops/sec ±0.47% (3249852 samples) | |
// Run5 | |
// t6 12 82,602,611 ops/sec ±3.23% (5567327 samples) | |
// t13 15 67,757,801 ops/sec ±5.04% (5529836 samples) | |
// t11 15 66,201,293 ops/sec ±4.01% (5503597 samples) | |
// t2 15 66,138,288 ops/sec ±4.28% (5532916 samples) | |
// t10 15 64,994,750 ops/sec ±4.07% (5573779 samples) | |
// t5 16 64,420,196 ops/sec ±4.49% (5511658 samples) | |
// t12 16 64,350,691 ops/sec ±4.22% (5543241 samples) | |
// t14 16 63,608,852 ops/sec ±4.29% (5533829 samples) | |
// t8 16 62,180,585 ops/sec ±4.28% (5589059 samples) | |
// t1 16 61,317,595 ops/sec ±4.49% (5499203 samples) | |
// t4 17 60,565,023 ops/sec ±4.09% (5452154 samples) | |
// t9 67 14,872,355 ops/sec ±1.92% (5009781 samples) | |
// t3 70 14,248,844 ops/sec ±1.94% (4984826 samples) | |
// t7 402 2,485,232 ops/sec ±0.46% (3195191 samples) | |
// Run6 | |
// t6 12 83,087,966 ops/sec ±4.22% (5511086 samples) | |
// t5 15 68,365,926 ops/sec ±4.45% (5489280 samples) | |
// t4 15 67,871,747 ops/sec ±4.5% (5508866 samples) | |
// t13 15 65,433,470 ops/sec ±3.76% (5522122 samples) | |
// t12 15 64,906,796 ops/sec ±4.14% (5462456 samples) | |
// t8 16 64,117,755 ops/sec ±3.94% (5505389 samples) | |
// t14 16 63,613,924 ops/sec ±4.11% (5480734 samples) | |
// t11 16 63,333,235 ops/sec ±3.83% (5523122 samples) | |
// t10 16 60,789,312 ops/sec ±3.79% (5514921 samples) | |
// t1 16 60,650,965 ops/sec ±4.46% (5450159 samples) | |
// t2 17 58,591,028 ops/sec ±4.26% (5416216 samples) | |
// t9 67 14,830,069 ops/sec ±1.84% (5018648 samples) | |
// t3 68 14,662,999 ops/sec ±1.77% (4973228 samples) | |
// t7 404 2,473,769 ops/sec ±0.51% (3170824 samples) | |
// Run7 | |
// t6 12 83,818,743 ops/sec ±3.09% (5598817 samples) | |
// t5 14 72,949,618 ops/sec ±4.84% (5481222 samples) | |
// t13 15 65,705,218 ops/sec ±4.22% (5542134 samples) | |
// t8 16 63,927,214 ops/sec ±4.19% (5569891 samples) | |
// t4 16 63,665,942 ops/sec ±4.78% (5529373 samples) | |
// t10 16 63,522,228 ops/sec ±4.96% (5565185 samples) | |
// t1 16 61,889,098 ops/sec ±4.46% (5514898 samples) | |
// t2 17 60,096,842 ops/sec ±5.05% (5533683 samples) | |
// t14 17 59,859,395 ops/sec ±4.54% (5385571 samples) | |
// t11 17 58,293,804 ops/sec ±3.83% (5553810 samples) | |
// t12 18 56,823,041 ops/sec ±3.81% (5464483 samples) | |
// t3 70 14,294,844 ops/sec ±1.81% (5006008 samples) | |
// t9 71 14,127,240 ops/sec ±1.61% (5045317 samples) | |
// t7 402 2,487,563 ops/sec ±0.5% (3186908 samples) | |
// Run8 | |
// t6 13 78,351,863 ops/sec ±3.04% (5497644 samples) | |
// t5 15 67,295,253 ops/sec ±4.06% (5476827 samples) | |
// t11 15 66,408,658 ops/sec ±6.03% (5420017 samples) | |
// t14 15 65,830,958 ops/sec ±4.47% (5382332 samples) | |
// t8 15 65,293,013 ops/sec ±4.65% (5435514 samples) | |
// t4 16 64,242,107 ops/sec ±6.9% (5453762 samples) | |
// t13 16 63,971,325 ops/sec ±4.31% (5389447 samples) | |
// t10 16 63,687,863 ops/sec ±3.89% (5470621 samples) | |
// t12 16 62,413,950 ops/sec ±4.36% (5341060 samples) | |
// t1 16 62,014,842 ops/sec ±5.1% (5336512 samples) | |
// t2 17 57,287,578 ops/sec ±3.94% (5443017 samples) | |
// t3 66 15,112,607 ops/sec ±1.72% (5002545 samples) | |
// t9 68 14,640,007 ops/sec ±1.84% (4952292 samples) | |
// t7 399 2,506,611 ops/sec ±0.47% (3193253 samples) | |
// Run9 | |
// t6 14 72,624,878 ops/sec ±4.45% (5430590 samples) | |
// t10 16 61,927,817 ops/sec ±3.85% (5607718 samples) | |
// t11 16 61,269,898 ops/sec ±4.62% (5553984 samples) | |
// t5 17 60,386,155 ops/sec ±4.12% (5540839 samples) | |
// t1 17 59,898,306 ops/sec ±4.02% (5625523 samples) | |
// t14 17 59,694,290 ops/sec ±4.19% (5443165 samples) | |
// t8 17 58,437,878 ops/sec ±4.78% (5343447 samples) | |
// t2 17 58,200,446 ops/sec ±4.47% (5608102 samples) | |
// t4 17 57,831,911 ops/sec ±5% (5341391 samples) | |
// t12 17 57,468,107 ops/sec ±4.27% (5404784 samples) | |
// t13 18 55,777,200 ops/sec ±4.86% (5207922 samples) | |
// t9 72 13,861,267 ops/sec ±2.36% (4975786 samples) | |
// t3 73 13,680,438 ops/sec ±6.14% (4799410 samples) | |
// t7 431 2,321,160 ops/sec ±0.51% (3042824 samples) | |
// Run10 | |
// t6 12 83,692,146 ops/sec ±2.7% (5654611 samples) | |
// t5 15 65,768,747 ops/sec ±3.97% (5592509 samples) | |
// t12 16 64,266,304 ops/sec ±3.84% (5602755 samples) | |
// t14 16 63,767,853 ops/sec ±3.81% (5606688 samples) | |
// t8 16 63,285,134 ops/sec ±5.16% (5581155 samples) | |
// t4 16 62,703,006 ops/sec ±4.58% (5575864 samples) | |
// t13 16 62,602,949 ops/sec ±3.77% (5624981 samples) | |
// t11 16 61,904,955 ops/sec ±3.69% (5616971 samples) | |
// t10 17 60,566,571 ops/sec ±4.05% (5615264 samples) | |
// t1 17 59,866,511 ops/sec ±4.62% (5511755 samples) | |
// t2 18 56,958,999 ops/sec ±3.85% (5566513 samples) | |
// t3 67 14,896,234 ops/sec ±1.7% (5067301 samples) | |
// t9 67 14,837,252 ops/sec ±1.72% (5096859 samples) | |
// t7 402 2,488,972 ops/sec ±0.58% (3227605 samples) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment