diff --git a/test/harness.ts b/test/harness.ts index 11743ffeff..5c6ed5799f 100644 --- a/test/harness.ts +++ b/test/harness.ts @@ -1180,6 +1180,8 @@ if (secretTestFn) { if (!options) { options = {}; } + + // Default delta is 20 MB. const delta = options?.delta ?? 20; options.label ??= label; @@ -1200,6 +1202,10 @@ declare module "bun:test" { minimumMilliseocnds?: number; verbose?: boolean; maxWarmup?: number; + + /** + * Default delta is 20 MB. + */ delta?: number; } interface Test { diff --git a/test/js/bun/shell/echo-hi-leak-test.test.ts b/test/js/bun/shell/echo-hi-leak-test.test.ts new file mode 100644 index 0000000000..0132907ab1 --- /dev/null +++ b/test/js/bun/shell/echo-hi-leak-test.test.ts @@ -0,0 +1,17 @@ +import { test, expect } from "bun:test"; + +test.leak( + "echo hi", + async () => { + await Bun.$`echo hi`.quiet(); + }, + { delta: 5, repeatCount: 500 }, +); + +test.leak( + "echo hi text", + async () => { + await Bun.$`echo hi`.text(); + }, + { delta: 5, repeatCount: 500 }, +); diff --git a/test/js/web/request/request-clone-leak.test.ts b/test/js/web/request/request-clone-leak.test.ts index 4192fb1489..88598bb3b4 100644 --- a/test/js/web/request/request-clone-leak.test.ts +++ b/test/js/web/request/request-clone-leak.test.ts @@ -50,54 +50,15 @@ const constructorArgs = [ }, }, ], -]; +] as const; for (let i = 0; i < constructorArgs.length; i++) { const args = constructorArgs[i]; - test("new Request(test #" + i + ")", () => { - Bun.gc(true); - - for (let i = 0; i < 1000; i++) { - new Request(...args); - } - - Bun.gc(true); - const baseline = (process.memoryUsage.rss() / 1024 / 1024) | 0; - for (let i = 0; i < 2000; i++) { - for (let j = 0; j < 500; j++) { - new Request(...args); - } - Bun.gc(); - } - Bun.gc(true); - - const memory = (process.memoryUsage.rss() / 1024 / 1024) | 0; - const delta = Math.max(memory, baseline) - Math.min(baseline, memory); - console.log("RSS delta: ", delta, "MB"); - expect(delta).toBeLessThan(30); + test.leak("new Request(test #" + i + ")", async () => { + new Request(...args); }); - test("request.clone(test #" + i + ")", () => { - Bun.gc(true); - - for (let i = 0; i < 1000; i++) { - const request = new Request(...args); - request.clone(); - } - - Bun.gc(true); - const baseline = (process.memoryUsage.rss() / 1024 / 1024) | 0; - for (let i = 0; i < 2000; i++) { - for (let j = 0; j < 500; j++) { - const request = new Request(...args); - request.clone(); - } - Bun.gc(); - } - Bun.gc(true); - - const memory = (process.memoryUsage.rss() / 1024 / 1024) | 0; - const delta = Math.max(memory, baseline) - Math.min(baseline, memory); - console.log("RSS delta: ", delta, "MB"); - expect(delta).toBeLessThan(30); + test.leak("request.clone(test #" + i + ")", async () => { + const request = new Request(...args); + request.clone(); }); }