Skip to content

Commit

Permalink
benchmark: create benchmark for typescript
Browse files Browse the repository at this point in the history
PR-URL: nodejs#54904
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
  • Loading branch information
marco-ippolito authored and louwers committed Nov 2, 2024
1 parent 947ccb4 commit 4c1ba41
Show file tree
Hide file tree
Showing 6 changed files with 166 additions and 0 deletions.
21 changes: 21 additions & 0 deletions benchmark/fixtures/strip-types-benchmark.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
function processData(input) {
return {
...input,
b: input.b + 1
};
}

const data = {
a: "test",
b: 42,
c: true,
d: {
e: ["hello", "world"],
f: {
g: 100,
h: ["str", 123, false]
}
}
};

export const result = processData(data);
34 changes: 34 additions & 0 deletions benchmark/fixtures/strip-types-benchmark.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
type ComplexType = {
a: string;
b: number;
c: boolean;
d: {
e: string[];
f: {
g: number;
h: [string, number, boolean];
};
};
};

function processData(input: ComplexType): ComplexType {
return {
...input,
b: input.b + 1
};
}

const data: ComplexType = {
a: "test",
b: 42,
c: true,
d: {
e: ["hello", "world"],
f: {
g: 100,
h: ["str", 123, false]
}
}
};

export const result = processData(data);
28 changes: 28 additions & 0 deletions benchmark/fixtures/transform-types-benchmark.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
var Color;
(function (Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Blue"] = 2] = "Blue";
})(Color || (Color = {}));
var Geometry;
(function (Geometry) {
class Circle {
constructor(center, radius) {
this.center = center;
this.radius = radius;
}
area() {
return Math.PI * Math.pow(this.radius, 2);
}
}
Geometry.Circle = Circle;
})(Geometry || (Geometry = {}));
function processShape(color, shape) {
const colorName = Color[color];
const area = shape.area().toFixed(2);
return `A ${colorName} circle with area ${area}`;
}

const point = { x: 0, y: 0 };
const circle = new Geometry.Circle(point, 5);
export const result = processShape(Color.Blue, circle);
30 changes: 30 additions & 0 deletions benchmark/fixtures/transform-types-benchmark.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
enum Color {
Red,
Green,
Blue
}

namespace Geometry {
export interface Point {
x: number;
y: number;
}

export class Circle {
constructor(public center: Point, public radius: number) { }

area(): number {
return Math.PI * this.radius ** 2;
}
}
}

function processShape(color: Color, shape: Geometry.Circle): string {
const colorName = Color[color];
const area = shape.area().toFixed(2);
return `A ${colorName} circle with area ${area}`;
}

const point: Geometry.Point = { x: 0, y: 0 };
const circle = new Geometry.Circle(point, 5);
export const result = processShape(Color.Blue, circle);
27 changes: 27 additions & 0 deletions benchmark/ts/strip-typescript.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
'use strict';

const common = require('../common');
const path = require('path');
const assert = require('node:assert');


const js = path.resolve(__dirname, '../fixtures/strip-types-benchmark.js');
const ts = path.resolve(__dirname, '../fixtures/strip-types-benchmark.ts');

const bench = common.createBenchmark(main, {
filepath: [ts, js],
n: [1e4],
}, {
flags: ['--experimental-strip-types', '--disable-warning=ExperimentalWarning'],
});

async function main({ n, filepath }) {
let output;
bench.start();
for (let i = 0; i < n; i++) {
const { result } = await import(`${filepath}?${i}`);
output = result;
}
bench.end(n);
assert.ok(output);
}
26 changes: 26 additions & 0 deletions benchmark/ts/transform-typescript.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
'use strict';

const common = require('../common');
const path = require('path');
const assert = require('node:assert');

const js = path.resolve(__dirname, '../fixtures/transform-types-benchmark.js');
const ts = path.resolve(__dirname, '../fixtures/transform-types-benchmark.ts');

const bench = common.createBenchmark(main, {
filepath: [js, ts],
n: [1e4],
}, {
flags: ['--experimental-transform-types', '--disable-warning=ExperimentalWarning'],
});

async function main({ n, filepath }) {
let output;
bench.start();
for (let i = 0; i < n; i++) {
const { result } = await import(`${filepath}?${i}`);
output = result;
}
bench.end(n);
assert.ok(output);
}

0 comments on commit 4c1ba41

Please sign in to comment.