Skip to content

Instantly share code, notes, and snippets.

@orodio
Last active February 1, 2020 02:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save orodio/51306b6e28d97e7fb4e3919104477113 to your computer and use it in GitHub Desktop.
Save orodio/51306b6e28d97e7fb4e3919104477113 to your computer and use it in GitHub Desktop.
choose
// 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)
// 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