Skip to content

Commit f828319

Browse files
committedFeb 19, 2025·
test: add bench and bundle tests
1 parent cbb0cc9 commit f828319

File tree

4 files changed

+74
-0
lines changed

4 files changed

+74
-0
lines changed
 

‎package.json

+2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"dist"
2828
],
2929
"scripts": {
30+
"bench": "vitest bench",
3031
"build": "unbuild",
3132
"dev": "vitest dev",
3233
"lint": "eslint . && prettier -c src test",
@@ -44,6 +45,7 @@
4445
"esbuild": "^0.25.0",
4546
"eslint": "^9.20.1",
4647
"eslint-config-unjs": "^0.4.2",
48+
"mitata": "^1.0.34",
4749
"prettier": "^3.5.1",
4850
"typescript": "^5.7.3",
4951
"unbuild": "^3.3.1",

‎pnpm-lock.yaml

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎test/benchmarks.bench.ts

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { bench, describe } from "vitest";
2+
3+
import { digest as digestJS } from "../src/crypto/js";
4+
import { digest as digestNode } from "../src/crypto/node";
5+
6+
describe("benchmarks", () => {
7+
describe("digest", () => {
8+
bench("js", () => {
9+
digestJS("hello world");
10+
});
11+
bench("node", () => {
12+
digestNode("hello world");
13+
});
14+
});
15+
});

‎test/bundle.test.ts

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { describe, it, expect } from "vitest";
2+
import { fileURLToPath } from "node:url";
3+
import zlib from "node:zlib";
4+
import { build } from "esbuild";
5+
6+
describe("bundle size", () => {
7+
it("digest (js)", async () => {
8+
const code = /* js */ `
9+
import { digest } from "../src/crypto/js/index";
10+
digest("")
11+
`;
12+
const { bytes, gzipSize } = await getBundleSize(code);
13+
// console.log({ bytes, gzipSize });
14+
expect(bytes).toBeLessThanOrEqual(3800); // <3.8kb
15+
expect(gzipSize).toBeLessThanOrEqual(1900); // <1.9kb
16+
});
17+
18+
it("serialize", async () => {
19+
const code = /* js */ `
20+
import { serialize } from "../src";
21+
serialize("")
22+
`;
23+
const { bytes, gzipSize } = await getBundleSize(code);
24+
// console.log({ bytes, gzipSize });
25+
expect(bytes).toBeLessThanOrEqual(4400); // <4.4kb
26+
expect(gzipSize).toBeLessThanOrEqual(1600); // <1.6kb
27+
});
28+
});
29+
30+
async function getBundleSize(code: string) {
31+
const res = await build({
32+
bundle: true,
33+
metafile: true,
34+
write: false,
35+
minify: true,
36+
format: "esm",
37+
platform: "node",
38+
outfile: "index.mjs",
39+
stdin: {
40+
contents: code,
41+
resolveDir: fileURLToPath(new URL(".", import.meta.url)),
42+
sourcefile: "index.mjs",
43+
loader: "js",
44+
},
45+
});
46+
const { bytes } = res.metafile.outputs["index.mjs"];
47+
const gzipSize = zlib.gzipSync(res.outputFiles[0].text).byteLength;
48+
return { bytes, gzipSize };
49+
}

0 commit comments

Comments
 (0)
Please sign in to comment.