Skip to content

Commit 2d3c043

Browse files
committed
test: add examples and run them in the ci
1 parent 40f0a9b commit 2d3c043

36 files changed

+928
-16
lines changed

.github/workflows/ci.yml

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,40 @@ jobs:
4040
with:
4141
run: pnpm moon run :bench
4242

43+
list-examples:
44+
runs-on: "ubuntu-latest"
45+
name: List examples
46+
outputs:
47+
examples: ${{ steps.list-examples.outputs.examples }}
48+
steps:
49+
- uses: "actions/checkout@v3"
50+
# list the directories in ./examples and output them to a github action workflow variables as a JSON array
51+
- run: |
52+
examples=$(find ./examples -maxdepth 1 -mindepth 1 -type d -printf '%f\n' | jq -R -s -c 'split("\n") | map(select(length > 0))')
53+
echo "::set-output name=examples::$examples"
54+
id: list-examples
55+
4356
node-versions:
4457
runs-on: "ubuntu-latest"
45-
name: "Node ${{ matrix.node-version }}"
58+
name: "${{ matrix.example }} on Node ${{ matrix.node-version }}"
59+
needs: list-examples
4660
strategy:
4761
matrix:
4862
node-version: ["14", "16", "18", "20"]
63+
example: ${{ fromJson(needs.list-examples.outputs.examples) }}
4964
include:
65+
# tinybench does not support node 14
5066
- node-version: "14"
5167
pnpm-version: "7"
5268
skip-tinybench: true
69+
exclude:
70+
# esbuild-register does not work well with node 14
71+
- node-version: "14"
72+
example: with-typescript-cjs
73+
- node-version: "14"
74+
example: with-typescript-esm
75+
- node-version: "14"
76+
example: with-typescript-simple-esm
5377
fail-fast: false
5478
steps:
5579
- uses: "actions/checkout@v3"
@@ -70,12 +94,12 @@ jobs:
7094
if: matrix.skip-tinybench != true
7195
uses: CodSpeedHQ/action@feat/node-script
7296
with:
73-
run: pnpm moon run tinybench-plugin:bench
97+
run: pnpm --filter ${{ matrix.example }} bench-tinybench
7498
env:
7599
CODSPEED_SKIP_UPLOAD: true
76100
- name: Run benchmarks with benchmark.js-plugin
77101
uses: CodSpeedHQ/action@feat/node-script
78102
with:
79-
run: pnpm moon run benchmark.js-plugin:bench
103+
run: pnpm --filter ${{ matrix.example }} bench-benchmark-js
80104
env:
81105
CODSPEED_SKIP_UPLOAD: true

.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
auto-install-peers=true
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
const { withCodSpeed } = require("@codspeed/benchmark.js-plugin");
2+
const Benchmark = require("benchmark");
3+
4+
const suite = withCodSpeed(new Benchmark.Suite());
5+
6+
suite
7+
.add("RegExp#test", function () {
8+
/o/.test("Hello World!");
9+
})
10+
.add("String#indexOf", function () {
11+
"Hello World!".indexOf("o") > -1;
12+
})
13+
// add listeners
14+
.on("cycle", function (event) {
15+
console.log(String(event.target));
16+
})
17+
// run async
18+
.run({ async: true });
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "with-javascript-cjs",
3+
"private": true,
4+
"scripts": {
5+
"bench-benchmark-js": "node benchmark-js.js",
6+
"bench-tinybench": "node tinybench.js"
7+
},
8+
"devDependencies": {
9+
"@codspeed/benchmark.js-plugin": "workspace:^1.1.0",
10+
"@codspeed/tinybench-plugin": "workspace:^1.1.0",
11+
"benchmark": "^2.1.4",
12+
"tinybench": "^2.5.0"
13+
}
14+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
const { withCodSpeed } = require("@codspeed/tinybench-plugin");
2+
const { Bench } = require("tinybench");
3+
4+
const bench = withCodSpeed(new Bench({ time: 100 }));
5+
6+
bench
7+
.add("switch 1", () => {
8+
let a = 1;
9+
let b = 2;
10+
const c = a;
11+
a = b;
12+
b = c;
13+
})
14+
.add("switch 2", () => {
15+
let a = 1;
16+
let b = 10;
17+
a = b + a;
18+
b = a - b;
19+
a = b - a;
20+
});
21+
22+
bench.run().then(() => {
23+
console.table(
24+
bench.tasks.map(({ name, result }) => ({
25+
"Task Name": name,
26+
"Average Time (ps)": result?.mean ? result.mean * 1000 : "N/A",
27+
"Variance (ps)": result?.variance ? result.variance * 1000 : "N/A",
28+
}))
29+
);
30+
});
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { withCodSpeed } from "@codspeed/benchmark.js-plugin";
2+
import Benchmark from "benchmark";
3+
4+
const suite = withCodSpeed(new Benchmark.Suite());
5+
6+
suite
7+
.add("RegExp#test", function () {
8+
/o/.test("Hello World!");
9+
})
10+
.add("String#indexOf", function () {
11+
"Hello World!".indexOf("o") > -1;
12+
})
13+
// add listeners
14+
.on("cycle", function (event) {
15+
console.log(String(event.target));
16+
})
17+
// run async
18+
.run({ async: true });
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "with-javascript-esm",
3+
"private": true,
4+
"type": "module",
5+
"scripts": {
6+
"bench-benchmark-js": "node benchmark-js.js",
7+
"bench-tinybench": "node tinybench.js"
8+
},
9+
"devDependencies": {
10+
"@codspeed/benchmark.js-plugin": "workspace:^1.1.0",
11+
"@codspeed/tinybench-plugin": "workspace:^1.1.0",
12+
"benchmark": "^2.1.4",
13+
"tinybench": "^2.5.0"
14+
}
15+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { withCodSpeed } from "@codspeed/tinybench-plugin";
2+
import { Bench } from "tinybench";
3+
4+
const bench = withCodSpeed(new Bench({ time: 100 }));
5+
6+
bench
7+
.add("switch 1", () => {
8+
let a = 1;
9+
let b = 2;
10+
const c = a;
11+
a = b;
12+
b = c;
13+
})
14+
.add("switch 2", () => {
15+
let a = 1;
16+
let b = 10;
17+
a = b + a;
18+
b = a - b;
19+
a = b - a;
20+
});
21+
22+
bench.run().then(() => {
23+
console.table(
24+
bench.tasks.map(({ name, result }) => ({
25+
"Task Name": name,
26+
"Average Time (ps)": result?.mean ? result.mean * 1000 : "N/A",
27+
"Variance (ps)": result?.variance ? result.variance * 1000 : "N/A",
28+
}))
29+
);
30+
});
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import type { WithCodSpeedSuite } from "@codspeed/benchmark.js-plugin";
2+
import {
3+
iterativeFibonacci,
4+
recursiveCachedFibonacci,
5+
recursiveFibonacci,
6+
} from "../../src/fibonacci";
7+
8+
export function registerFiboBenchmarks(suite: WithCodSpeedSuite) {
9+
suite
10+
.add("test_recursive_fibo_10", () => {
11+
recursiveFibonacci(10);
12+
})
13+
.add("test_recursive_fibo_20", () => {
14+
recursiveFibonacci(20);
15+
});
16+
17+
suite
18+
.add("test_recursive_cached_fibo_10", () => {
19+
recursiveCachedFibonacci(10);
20+
})
21+
.add("test_recursive_cached_fibo_20", () => {
22+
recursiveCachedFibonacci(20);
23+
})
24+
.add("test_recursive_cached_fibo_30", () => {
25+
recursiveCachedFibonacci(30);
26+
});
27+
28+
suite
29+
.add("test_iterative_fibo_10", () => {
30+
iterativeFibonacci(10);
31+
})
32+
.add("test_iterative_fibo_100", () => {
33+
iterativeFibonacci(100);
34+
});
35+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import type { WithCodSpeedSuite } from "@codspeed/benchmark.js-plugin";
2+
import { aBaz, baz } from "../../src/foobarbaz";
3+
4+
export function registerFoobarbazBenchmarks(suite: WithCodSpeedSuite) {
5+
suite
6+
.add("test sync baz 10", () => {
7+
baz(10);
8+
})
9+
.add("test sync baz 100", () => {
10+
baz(100);
11+
});
12+
13+
suite
14+
.add("test async baz 10", async () => {
15+
await aBaz(10);
16+
})
17+
.add("test async baz 100", async () => {
18+
await aBaz(100);
19+
});
20+
}

0 commit comments

Comments
 (0)