mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 02:48:50 +00:00
97 lines
2.9 KiB
TypeScript
97 lines
2.9 KiB
TypeScript
import { beforeAll, describe, expect, test } from "bun:test";
|
|
import { promisify } from "node:util";
|
|
import zlib from "node:zlib";
|
|
|
|
const input = Buffer.alloc(50000);
|
|
for (let i = 0; i < input.length; i++) input[i] = Math.random();
|
|
|
|
describe("zlib compression does not leak memory", () => {
|
|
beforeAll(() => {
|
|
for (let index = 0; index < 10_000; index++) {
|
|
zlib.deflateSync(input);
|
|
}
|
|
Bun.gc(true);
|
|
console.log("beforeAll done");
|
|
});
|
|
|
|
for (const compress of ["deflate", "gzip"] as const) {
|
|
test(
|
|
compress,
|
|
async () => {
|
|
for (let index = 0; index < 10_000; index++) {
|
|
await promisify(zlib[compress])(input);
|
|
}
|
|
const baseline = process.memoryUsage.rss();
|
|
console.log(baseline);
|
|
for (let index = 0; index < 10_000; index++) {
|
|
await promisify(zlib[compress])(input);
|
|
}
|
|
Bun.gc(true);
|
|
const after = process.memoryUsage.rss();
|
|
console.log(after);
|
|
console.log("-", after - baseline);
|
|
console.log("-", 1024 * 1024 * 10);
|
|
expect(after - baseline).toBeLessThan(1024 * 1024 * 10);
|
|
},
|
|
0,
|
|
);
|
|
}
|
|
|
|
for (const compress of ["deflateSync", "gzipSync"] as const) {
|
|
test(
|
|
compress,
|
|
async () => {
|
|
for (let index = 0; index < 10_000; index++) {
|
|
zlib[compress](input);
|
|
}
|
|
const baseline = process.memoryUsage.rss();
|
|
console.log(baseline);
|
|
for (let index = 0; index < 10_000; index++) {
|
|
zlib[compress](input);
|
|
}
|
|
Bun.gc(true);
|
|
const after = process.memoryUsage.rss();
|
|
console.log(after);
|
|
console.log("-", after - baseline);
|
|
console.log("-", 1024 * 1024 * 10);
|
|
expect(after - baseline).toBeLessThan(1024 * 1024 * 10);
|
|
},
|
|
0,
|
|
);
|
|
}
|
|
|
|
test("brotliCompress", async () => {
|
|
for (let index = 0; index < 1_000; index++) {
|
|
await promisify(zlib.brotliCompress)(input);
|
|
}
|
|
const baseline = process.memoryUsage.rss();
|
|
console.log(baseline);
|
|
for (let index = 0; index < 1_000; index++) {
|
|
await promisify(zlib.brotliCompress)(input);
|
|
}
|
|
Bun.gc(true);
|
|
const after = process.memoryUsage.rss();
|
|
console.log(after);
|
|
console.log("-", after - baseline);
|
|
console.log("-", 1024 * 1024 * 10);
|
|
expect(after - baseline).toBeLessThan(1024 * 1024 * 10);
|
|
}, 0);
|
|
|
|
test("brotliCompressSync", async () => {
|
|
for (let index = 0; index < 1_000; index++) {
|
|
zlib.brotliCompressSync(input);
|
|
}
|
|
const baseline = process.memoryUsage.rss();
|
|
console.log(baseline);
|
|
for (let index = 0; index < 1_000; index++) {
|
|
zlib.brotliCompressSync(input);
|
|
}
|
|
Bun.gc(true);
|
|
const after = process.memoryUsage.rss();
|
|
console.log(after);
|
|
console.log("-", after - baseline);
|
|
console.log("-", 1024 * 1024 * 10);
|
|
expect(after - baseline).toBeLessThan(1024 * 1024 * 10);
|
|
}, 0);
|
|
});
|