Skip to content

Commit d446ed9

Browse files
committed
refactor: bench suites
1 parent c63ce3b commit d446ed9

File tree

3 files changed

+44
-17
lines changed

3 files changed

+44
-17
lines changed

test/bench/index.ts

+14-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
11
import { bench, group, run, summary } from "mitata";
2+
import { serialize } from "../../src/serialize";
23
import { benchConfig } from "./config";
3-
import { isModeEnabled } from "./utils/modes";
44
import {
55
createBenchObjects,
66
getPresetTitle,
77
type BenchObjectPreset,
88
} from "./utils/objects";
9+
import { suite } from "./utils/suites";
910
import { getVersions } from "./utils/versions";
1011

1112
const versions = await getVersions(benchConfig.versions);
1213

13-
if (isModeEnabled("presets")) {
14+
versions.push({
15+
name: "ohash @ dev",
16+
serialize,
17+
baseline: true,
18+
});
19+
20+
suite("presets", () => {
1421
group("serialize - presets", () => {
1522
for (const preset of benchConfig.presets) {
1623
group(getPresetTitle(preset), () => {
@@ -25,9 +32,9 @@ if (isModeEnabled("presets")) {
2532
});
2633
}
2734
});
28-
}
35+
});
2936

30-
if (isModeEnabled("combined")) {
37+
suite("combined", () => {
3138
group("serialize - combined presets", () => {
3239
summary(() => {
3340
for (const version of versions) {
@@ -45,9 +52,9 @@ if (isModeEnabled("combined")) {
4552
}
4653
});
4754
});
48-
}
55+
});
4956

50-
if (isModeEnabled("custom")) {
57+
suite("custom", () => {
5158
group("serialize - custom", () => {
5259
group("simple object", () => {
5360
const object = {
@@ -251,7 +258,7 @@ if (isModeEnabled("custom")) {
251258
});
252259
});
253260
});
254-
}
261+
});
255262

256263
await run();
257264

test/bench/utils/suites.ts

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
type SuiteName = keyof typeof suites;
2+
type Suite = (typeof suites)[SuiteName];
3+
4+
const suites = {
5+
full: 0b111,
6+
presets: 0b100,
7+
combined: 0b010,
8+
custom: 0b001,
9+
undefined: 0b000,
10+
} as const;
11+
12+
const defaultSuite = suites.presets;
13+
14+
const selectedSuite: Suite =
15+
process.argv
16+
.slice(2)
17+
.map((arg) => {
18+
const m = arg.replace("--", "");
19+
return m in suites ? suites[m as SuiteName] : suites.undefined;
20+
})
21+
// eslint-disable-next-line unicorn/no-array-reduce
22+
.reduce((acc, val) => (acc | val) as Suite, suites.undefined) ||
23+
defaultSuite;
24+
25+
export function suite(mode: SuiteName, fn: () => void) {
26+
if (suites[mode] & selectedSuite) {
27+
fn();
28+
}
29+
}

test/bench/utils/versions.ts

+1-10
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { homedir, tmpdir } from "node:os";
77
import { resolve } from "node:path";
88
import { pipeline } from "node:stream";
99
import { promisify } from "node:util";
10-
import { serialize } from "../../../src";
1110

1211
/**
1312
* Supports:
@@ -28,20 +27,12 @@ type Version = {
2827

2928
export async function getVersions(array: VersionString[]): Promise<Version[]> {
3029
const imports = await Promise.all(array.map((v) => getVersion(v)));
31-
const versions: Version[] = array.map((version, i) => ({
30+
return array.map((version, i) => ({
3231
name: `ohash @ ${version.length === 40 ? version.slice(0, 7) : version}`,
3332
serialize:
3433
"objectHash" in imports[i] ? imports[i].objectHash : imports[i].serialize,
3534
baseline: false,
3635
}));
37-
38-
versions.push({
39-
name: "ohash @ dev",
40-
serialize,
41-
baseline: true,
42-
});
43-
44-
return versions;
4536
}
4637

4738
async function getVersion(version: VersionString) {

0 commit comments

Comments
 (0)