···11+const now = () => (typeof performance !== "undefined" && performance.now ? performance.now() : Date.now());
22+33+function readRounds() {
44+ const raw = Number(process.argv[2]);
55+ return Number.isFinite(raw) && raw > 0 ? raw | 0 : 5000000;
66+}
77+88+function hot(
99+ a, b, c, d,
1010+ e, f, g, h
1111+) {
1212+ return (
1313+ a + b + c + d + e + f + g + h +
1414+ a + c + e + g + b + d + f + h +
1515+ a + d + g + b + e + h + c + f +
1616+ h + g + f + e + d + c + b + a
1717+ );
1818+}
1919+2020+function run(rounds) {
2121+ let total = 0;
2222+ for (let i = 0; i < rounds; i++) {
2323+ const n = i & 1023;
2424+ total += hot(n, n + 1, n + 2, n + 3, n + 4, n + 5, n + 6, n + 7);
2525+ }
2626+ return total;
2727+}
2828+2929+const rounds = readRounds();
3030+run(2000);
3131+3232+let best = Infinity;
3333+let checksum = 0;
3434+for (let i = 0; i < 5; i++) {
3535+ const t0 = now();
3636+ checksum = run(rounds);
3737+ const elapsed = now() - t0;
3838+ if (elapsed < best) best = elapsed;
3939+}
4040+4141+console.log("kind=js");
4242+console.log("rounds=" + rounds);
4343+console.log("best_ms=" + best.toFixed(3));
4444+console.log("checksum=" + checksum);
+44
tests/bench_typescript_type_hints_compare.ts
···11+const now = () => (typeof performance !== "undefined" && performance.now ? performance.now() : Date.now());
22+33+function readRounds(): number {
44+ const raw = Number(process.argv[2]);
55+ return Number.isFinite(raw) && raw > 0 ? raw | 0 : 5000000;
66+}
77+88+function hot(
99+ a: number, b: number, c: number, d: number,
1010+ e: number, f: number, g: number, h: number
1111+): number {
1212+ return (
1313+ a + b + c + d + e + f + g + h +
1414+ a + c + e + g + b + d + f + h +
1515+ a + d + g + b + e + h + c + f +
1616+ h + g + f + e + d + c + b + a
1717+ );
1818+}
1919+2020+function run(rounds: number): number {
2121+ let total = 0;
2222+ for (let i = 0; i < rounds; i++) {
2323+ const n = i & 1023;
2424+ total += hot(n, n + 1, n + 2, n + 3, n + 4, n + 5, n + 6, n + 7);
2525+ }
2626+ return total;
2727+}
2828+2929+const rounds = readRounds();
3030+run(2000);
3131+3232+let best = Infinity;
3333+let checksum = 0;
3434+for (let i = 0; i < 5; i++) {
3535+ const t0 = now();
3636+ checksum = run(rounds);
3737+ const elapsed = now() - t0;
3838+ if (elapsed < best) best = elapsed;
3939+}
4040+4141+console.log("kind=ts");
4242+console.log("rounds=" + rounds);
4343+console.log("best_ms=" + best.toFixed(3));
4444+console.log("checksum=" + checksum);
+27
tests/fixtures/type_hints_compare.js
···11+function addStep(value, delta) {
22+ return value + delta;
33+}
44+55+function mix(a, b, c) {
66+ return (a + b) * c - a / (b + 1);
77+}
88+99+function readRounds() {
1010+ const raw = Number(process.argv[2]);
1111+ return Number.isFinite(raw) && raw > 0 ? raw | 0 : 10000;
1212+}
1313+1414+const rounds = readRounds();
1515+let checksum = 0;
1616+1717+for (let i = 0; i < 240; i++) {
1818+ checksum = addStep(checksum, mix(i, i + 1, 3));
1919+}
2020+2121+for (let i = 0; i < rounds; i++) {
2222+ checksum = addStep(checksum, (i % 13) + (i % 7));
2323+}
2424+2525+console.log("rounds=" + rounds);
2626+console.log("checksum=" + checksum.toFixed(3));
2727+console.log("fallback=" + addStep("type", "script"));
+27
tests/fixtures/type_hints_compare.ts
···11+function addStep(value: number, delta: number): number {
22+ return value + delta;
33+}
44+55+function mix(a: number, b: number, c: number): number {
66+ return (a + b) * c - a / (b + 1);
77+}
88+99+function readRounds(): number {
1010+ const raw = Number(process.argv[2]);
1111+ return Number.isFinite(raw) && raw > 0 ? raw | 0 : 10000;
1212+}
1313+1414+const rounds = readRounds();
1515+let checksum = 0;
1616+1717+for (let i = 0; i < 240; i++) {
1818+ checksum = addStep(checksum, mix(i, i + 1, 3));
1919+}
2020+2121+for (let i = 0; i < rounds; i++) {
2222+ checksum = addStep(checksum, (i % 13) + (i % 7));
2323+}
2424+2525+console.log("rounds=" + rounds);
2626+console.log("checksum=" + checksum.toFixed(3));
2727+console.log("fallback=" + addStep("type" as any, "script" as any));