mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
benchmark: create benchmark for typescript
PR-URL: https://github.com/nodejs/node/pull/54904 Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
parent
6fb9f56994
commit
00d4f8073c
21
benchmark/fixtures/strip-types-benchmark.js
Normal file
21
benchmark/fixtures/strip-types-benchmark.js
Normal file
@ -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
benchmark/fixtures/strip-types-benchmark.ts
Normal file
34
benchmark/fixtures/strip-types-benchmark.ts
Normal file
@ -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
benchmark/fixtures/transform-types-benchmark.js
Normal file
28
benchmark/fixtures/transform-types-benchmark.js
Normal file
@ -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
benchmark/fixtures/transform-types-benchmark.ts
Normal file
30
benchmark/fixtures/transform-types-benchmark.ts
Normal file
@ -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
benchmark/ts/strip-typescript.js
Normal file
27
benchmark/ts/strip-typescript.js
Normal file
@ -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
benchmark/ts/transform-typescript.js
Normal file
26
benchmark/ts/transform-typescript.js
Normal file
@ -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);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user