Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions examples/with-typescript-esm/src/fibonacci.bench.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
import { describe, test } from "vitest";
import { recursiveFibonacci as recursiveFibonacciExport } from "./fibonacci";

// Imports are getters under Vite's module runner; read them once, outside the
// measured loop.
const recursiveFibonacci = recursiveFibonacciExport;
import { recursiveFibonacci } from "./fibonacci";

describe("recursiveFibonacci", () => {
test("fibo 30", async ({ bench }) => {
Expand Down
10 changes: 1 addition & 9 deletions examples/with-vitest-v5/src/fibonacci.bench.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,5 @@
import { describe, test } from "vitest";
import {
iterativeFibonacci as iterativeFibonacciExport,
recursiveFibonacci as recursiveFibonacciExport,
} from "./fibonacci";

// Imports are getters under Vite's module runner; read them once, outside the
// measured loop.
const recursiveFibonacci = recursiveFibonacciExport;
const iterativeFibonacci = iterativeFibonacciExport;
import { iterativeFibonacci, recursiveFibonacci } from "./fibonacci";

describe("fibonacci", () => {
test("fibo 15", async ({ bench }) => {
Expand Down
4 changes: 2 additions & 2 deletions packages/core/tests/optimization.integ.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ describe("optimization helpers", () => {
`const target = () => 1;
const before = %GetOptimizationStatus(target);
require(${corePath}).optimizeFunctionSync(target);
console.log("done", before, %GetOptimizationStatus(target));`,
console.log(\`done \${before} \${%GetOptimizationStatus(target)}\`);`,
);
const [, before, after] = stdout.match(/done (\d+) (\d+)/) ?? [];
expect(stdout).toContain("done");
Expand All @@ -34,7 +34,7 @@ describe("optimization helpers", () => {
const before = %GetOptimizationStatus(target);
require(${corePath})
.optimizeFunction(target)
.then(() => console.log("done", before, %GetOptimizationStatus(target)));`,
.then(() => console.log(\`done \${before} \${%GetOptimizationStatus(target)}\`));`,
);
const [, before, after] = stdout.match(/done (\d+) (\d+)/) ?? [];
expect(stdout).toContain("done");
Expand Down
6 changes: 1 addition & 5 deletions packages/vitest-plugin/benches/flat.bench.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
import { describe, test } from "vitest";
import parsePrExport from "./parsePr";

// Imports are getters under Vite's module runner; read it once, outside the
// measured loop.
const parsePr = parsePrExport;
import parsePr from "./parsePr";

const LONG_BODY =
new Array(1_000)
Expand Down
6 changes: 1 addition & 5 deletions packages/vitest-plugin/benches/parsePr.bench.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
import { describe, test } from "vitest";
import parsePrExport from "./parsePr";

// Imports are getters under Vite's module runner; read it once, outside the
// measured loop.
const parsePr = parsePrExport;
import parsePr from "./parsePr";

const LONG_BODY =
new Array(1_000)
Expand Down
14 changes: 12 additions & 2 deletions packages/vitest-plugin/src/__tests__/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { getV8Flags } from "@codspeed/core";
import { fromPartial } from "@total-typescript/shoehorn";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { type ViteUserConfig } from "vitest/config";
import codspeedPlugin from "../index";

const coreMocks = vi.hoisted(() => {
Expand Down Expand Up @@ -34,10 +35,10 @@ function apply(mode: string) {
return plugin.apply({}, fromPartial({ mode }));
}

function config() {
function config(userConfig: ViteUserConfig = {}) {
if (typeof plugin.config !== "function")
throw new Error("config is not a function");
return plugin.config.call({} as never, {}, fromPartial({}));
return plugin.config.call({} as never, userConfig, fromPartial({}));
}

describe("codSpeedPlugin", () => {
Expand Down Expand Up @@ -148,9 +149,18 @@ describe("codSpeedPlugin", () => {
provider: expect.stringContaining(
"packages/vitest-plugin/src/v5/provider.ts",
),
suppressExportGetterWarnings: true,
},
},
});
});

it("should keep an explicit suppressExportGetterWarnings from the user", () => {
const result = config({
test: { benchmark: { suppressExportGetterWarnings: false } },
}) as ViteUserConfig;

expect(result.test?.benchmark?.suppressExportGetterWarnings).toBe(false);
});
});
});
3 changes: 2 additions & 1 deletion packages/vitest-plugin/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,15 @@ export default function codspeedPlugin(): Plugin {
return true;
},
enforce: "post",
config(): ViteUserConfig {
config(userConfig): ViteUserConfig {
return {
test: {
pool: "forks",
globalSetup: [resolveFile("globalSetup")],
...resolveVitestBackend().getBenchmarkTestConfig(
getV8Flags(),
resolveFile,
(userConfig as ViteUserConfig).test,
),
},
};
Expand Down
11 changes: 10 additions & 1 deletion packages/vitest-plugin/src/vitestBackend.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export interface VitestBackend {
getBenchmarkTestConfig(
v8Flags: string[],
resolveFile: (name: string) => string,
userTestConfig: ViteUserConfig["test"],
): ViteUserConfig["test"];
}

Expand All @@ -36,10 +37,18 @@ class V5Backend implements VitestBackend {
getBenchmarkTestConfig(
v8Flags: string[],
resolveFile: (name: string) => string,
userTestConfig: ViteUserConfig["test"],
): ViteUserConfig["test"] {
// Vitest's export getter tracker runs inside the measured code; keep it off
// unless the user explicitly configured it.
const suppressExportGetterWarnings =
userTestConfig?.benchmark?.suppressExportGetterWarnings ?? true;
return {
execArgv: v8Flags,
benchmark: { provider: resolveFile("v5/provider") },
benchmark: {
provider: resolveFile("v5/provider"),
suppressExportGetterWarnings,
},
};
}
}
Expand Down
Loading