Created
February 20, 2025 17:24
-
-
Save webstrand/9c33c9493f6a07c1a63893bd15f31692 to your computer and use it in GitHub Desktop.
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
import { bench, do_not_optimize, run } from './node_modules/mitata/src/main.mjs'; | |
const ub = 100_000; | |
const adHoc = { | |
[Symbol.iterator]() { | |
return { | |
i: 0, | |
next() { | |
return this.i < ub ? { value: this.i++ } : { done: true } | |
} | |
} | |
} | |
} | |
const adHocReuse = { | |
[Symbol.iterator]() { | |
const result = { value: 0, done: false } | |
return { | |
i: 0, | |
next() { | |
if(this.i < ub) { | |
result.value = this.i++; | |
return result; | |
} | |
result.done = true; | |
return result; | |
} | |
} | |
} | |
} | |
const native = { | |
data: Array.from({ length: ub }, (_, i) => i), | |
[Symbol.iterator]() { | |
return this.data.values(); | |
} | |
} | |
const generator = { | |
*[Symbol.iterator]() { | |
for(let i = 0; i < ub; i++) yield i; | |
} | |
} | |
const generatorDelegation = { | |
data: Array.from({ length: ub }, (_, i) => i), | |
*[Symbol.iterator]() { | |
yield* this.data; | |
} | |
} | |
bench(`0 .. ${ub} native`, () => { | |
let i = 0; | |
for(let j of native) { | |
i += j; | |
} | |
return do_not_optimize(i) | |
}); | |
bench(`0 .. ${ub} ad-hoc`, () => { | |
let i = 0; | |
for(let j of adHoc) { | |
i += j!; | |
} | |
return do_not_optimize(i) | |
}); | |
bench(`0 .. ${ub} ad-hocreusing IteratorResult`, () => { | |
let i = 0; | |
for(let j of adHocReuse) { | |
i += j!; | |
} | |
return do_not_optimize(i) | |
}); | |
bench(`0 .. ${ub} generator`, () => { | |
let i = 0; | |
for(let j of generator) { | |
i += j!; | |
} | |
return do_not_optimize(i) | |
}); | |
bench(`0 .. ${ub} generator delegation`, () => { | |
let i = 0; | |
for(let j of generatorDelegation) { | |
i += j!; | |
} | |
return do_not_optimize(i) | |
}); | |
await run(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment