Skip to content

Commit 450f2c7

Browse files
authored
feat(benches): forge test --isolate (foundry-rs#11037)
1 parent 9dbae34 commit 450f2c7

File tree

6 files changed

+69
-15
lines changed

6 files changed

+69
-15
lines changed

.github/scripts/combine-benchmarks.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ EOF
126126
FIRST_FILE=1
127127
SYSTEM_INFO=""
128128

129-
for bench_file in "forge_test_bench.md" "forge_build_bench.md" "forge_coverage_bench.md"; do
129+
for bench_file in "forge_test_bench.md" "forge_isolate_test_bench.md" "forge_build_bench.md" "forge_coverage_bench.md"; do
130130
if [ -f "$OUTPUT_DIR/$bench_file" ]; then
131131
echo "Processing $bench_file..."
132132

@@ -135,6 +135,9 @@ for bench_file in "forge_test_bench.md" "forge_build_bench.md" "forge_coverage_b
135135
"forge_test_bench.md")
136136
SECTION_NAME="Forge Test"
137137
;;
138+
"forge_isolate_test_bench.md")
139+
SECTION_NAME="Forge Test (Isolated)"
140+
;;
138141
"forge_build_bench.md")
139142
SECTION_NAME="Forge Build"
140143
;;

.github/workflows/benchmarks.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,20 @@ jobs:
8383
--benchmarks forge_test,forge_fuzz_test \
8484
--output-file forge_test_bench.md
8585
86+
- name: Run forge isolate test benchmarks
87+
env:
88+
FOUNDRY_DIR: ${{ github.workspace }}/.foundry
89+
run: |
90+
VERSIONS="${{ github.event.inputs.versions || 'stable,nightly' }}"
91+
# Isolate tests default to Vectorized/solady but can be overridden
92+
REPOS="${{ github.event.inputs.repos || env.VECTORIZED_SOLADY }}"
93+
94+
./target/release/foundry-bench --output-dir ./benches --force-install \
95+
--versions $VERSIONS \
96+
--repos $REPOS \
97+
--benchmarks forge_isolate_test \
98+
--output-file forge_isolate_test_bench.md
99+
86100
- name: Run forge build benchmarks
87101
env:
88102
FOUNDRY_DIR: ${{ github.workspace }}/.foundry
@@ -124,6 +138,7 @@ jobs:
124138
name: benchmark-results
125139
path: |
126140
benches/forge_test_bench.md
141+
benches/forge_isolate_test_bench.md
127142
benches/forge_build_bench.md
128143
benches/forge_coverage_bench.md
129144
benches/LATEST.md

benches/LATEST.md

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 📊 Foundry Benchmark Results
22

3-
**Generated at**: 2025-07-17 14:25:08 UTC
3+
**Generated at**: 2025-07-23 09:01:16 UTC
44

55
## Forge Test
66

@@ -11,19 +11,33 @@
1111
### Foundry Versions
1212

1313
- **stable**: forge Version: 1.2.3-stable (a813a2c 2025-06-08)
14-
- **nightly**: forge Version: 1.3.0-nightly (0af4341 2025-07-17)
14+
- **nightly**: forge Version: 1.3.0-nightly (cb8f3bf 2025-07-23)
1515

1616
| Repository | stable | nightly |
1717
|------------|----------|----------|
18-
| ithacaxyz-account | 5.12 s | 5.15 s |
19-
| solady | 2.99 s | 2.87 s |
18+
| ithacaxyz-account | 5.44 s | 4.91 s |
19+
| solady | 3.02 s | 2.76 s |
2020

2121
## Forge Fuzz Test
2222

2323
| Repository | stable | nightly |
2424
|------------|----------|----------|
25-
| ithacaxyz-account | 5.45 s | 5.20 s |
26-
| solady | 3.08 s | 3.00 s |
25+
| ithacaxyz-account | 5.27 s | 4.90 s |
26+
| solady | 2.89 s | 2.82 s |
27+
28+
## Forge Test (Isolated)
29+
30+
### Repositories Tested
31+
32+
1. [Vectorized/solady](https://github.com/Vectorized/solady)
33+
### Foundry Versions
34+
35+
- **stable**: forge Version: 1.2.3-stable (a813a2c 2025-06-08)
36+
- **nightly**: forge Version: 1.3.0-nightly (cb8f3bf 2025-07-23)
37+
38+
| Repository | stable | nightly |
39+
|------------|----------|----------|
40+
| solady | 3.21 s | 2.88 s |
2741

2842
## Forge Build
2943

@@ -34,21 +48,21 @@
3448
### Foundry Versions
3549

3650
- **stable**: forge Version: 1.2.3-stable (a813a2c 2025-06-08)
37-
- **nightly**: forge Version: 1.3.0-nightly (0af4341 2025-07-17)
51+
- **nightly**: forge Version: 1.3.0-nightly (cb8f3bf 2025-07-23)
3852

3953
### No Cache
4054

4155
| Repository | stable | nightly |
4256
|------------|----------|----------|
43-
| ithacaxyz-account | 2.58 s | 2.83 s |
44-
| solady | 3.88 s | 3.98 s |
57+
| ithacaxyz-account | 2.58 s | 2.79 s |
58+
| solady | 3.79 s | 3.89 s |
4559

4660
### With Cache
4761

4862
| Repository | stable | nightly |
4963
|------------|----------|----------|
50-
| ithacaxyz-account | 0.210 s | 0.443 s |
51-
| solady | 0.093 s | 0.195 s |
64+
| ithacaxyz-account | 0.209 s | 0.458 s |
65+
| solady | 0.096 s | 0.226 s |
5266

5367
## Forge Coverage
5468

@@ -58,11 +72,11 @@
5872
### Foundry Versions
5973

6074
- **stable**: forge Version: 1.2.3-stable (a813a2c 2025-06-08)
61-
- **nightly**: forge Version: 1.3.0-nightly (0af4341 2025-07-17)
75+
- **nightly**: forge Version: 1.3.0-nightly (cb8f3bf 2025-07-23)
6276

6377
| Repository | stable | nightly |
6478
|------------|----------|----------|
65-
| ithacaxyz-account | 22.03 s | 21.98 s |
79+
| ithacaxyz-account | 21.88 s | 22.52 s |
6680

6781
## System Information
6882

benches/src/lib.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,25 @@ impl BenchmarkProject {
355355
)
356356
}
357357

358+
/// Benchmark forge test with --isolate flag
359+
pub fn bench_forge_isolate_test(
360+
&self,
361+
version: &str,
362+
runs: u32,
363+
verbose: bool,
364+
) -> Result<HyperfineResult> {
365+
// Build before running tests
366+
self.hyperfine(
367+
"forge_isolate_test",
368+
version,
369+
"forge test --isolate",
370+
runs,
371+
Some("forge build"),
372+
None,
373+
verbose,
374+
)
375+
}
376+
358377
/// Get the root path of the project
359378
pub fn root(&self) -> &Path {
360379
&self.root_path
@@ -374,6 +393,7 @@ impl BenchmarkProject {
374393
"forge_build_with_cache" => self.bench_forge_build_with_cache(version, runs, verbose),
375394
"forge_fuzz_test" => self.bench_forge_fuzz_test(version, runs, verbose),
376395
"forge_coverage" => self.bench_forge_coverage(version, runs, verbose),
396+
"forge_isolate_test" => self.bench_forge_isolate_test(version, runs, verbose),
377397
_ => eyre::bail!("Unknown benchmark: {}", benchmark),
378398
}
379399
}

benches/src/main.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@ use foundry_common::sh_println;
1010
use rayon::prelude::*;
1111
use std::{fs, path::PathBuf, process::Command, sync::Mutex};
1212

13-
const ALL_BENCHMARKS: [&str; 5] = [
13+
const ALL_BENCHMARKS: [&str; 6] = [
1414
"forge_test",
1515
"forge_build_no_cache",
1616
"forge_build_with_cache",
1717
"forge_fuzz_test",
1818
"forge_coverage",
19+
"forge_isolate_test",
1920
];
2021

2122
/// Foundry Benchmark Runner

benches/src/results.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ pub fn format_benchmark_name(name: &str) -> String {
231231
"forge_build_with_cache" => "Forge Build (With Cache)",
232232
"forge_fuzz_test" => "Forge Fuzz Test",
233233
"forge_coverage" => "Forge Coverage",
234+
"forge_isolate_test" => "Forge Test (Isolated)",
234235
_ => name,
235236
}
236237
.to_string()

0 commit comments

Comments
 (0)