Skip to content

Commit a1895d1

Browse files
feat(cargo-codspeed): add default harness integration test
1 parent f8f4268 commit a1895d1

File tree

7 files changed

+82
-1
lines changed

7 files changed

+82
-1
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
target/
2+
Cargo.lock
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
[package]
2+
name = "default-harness-error-test"
3+
version = "0.1.0"
4+
edition = "2021"
5+
publish = false
6+
7+
[dependencies]
8+
bencher = "0.1.5"
9+
codspeed = { path = "../../../codspeed" }
10+
codspeed-bencher-compat = { path = "../../../bencher_compat" }
11+
12+
[[bench]]
13+
name = "bencher_example"
14+
# Missing harness = false to trigger error
15+
16+
[[bench]]
17+
name = "bencher_correct"
18+
harness = false
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use codspeed::codspeed::black_box;
2+
use codspeed_bencher_compat::{benchmark_group, benchmark_main, Bencher};
3+
4+
pub fn b(bench: &mut Bencher) {
5+
bench.iter(|| (0..50).fold(0, |x, y| black_box(x + y)))
6+
}
7+
8+
benchmark_group!(benches, b);
9+
benchmark_main!(benches);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use codspeed::codspeed::black_box;
2+
use codspeed_bencher_compat::{benchmark_group, benchmark_main, Bencher};
3+
4+
pub fn a(bench: &mut Bencher) {
5+
bench.iter(|| (0..100).fold(0, |x, y| black_box(x + y)))
6+
}
7+
8+
benchmark_group!(benches, a);
9+
benchmark_main!(benches);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use codspeed::codspeed::black_box;
2+
use codspeed_bencher_compat::{benchmark_group, benchmark_main, Bencher};
3+
4+
pub fn c(bench: &mut Bencher) {
5+
bench.iter(|| (0..75).fold(0, |x, y| black_box(x + y)))
6+
}
7+
8+
benchmark_group!(benches, c);
9+
benchmark_main!(benches);
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
use predicates::prelude::*;
2+
use predicates::str::contains;
3+
4+
mod helpers;
5+
use helpers::*;
6+
7+
const DIR: &str = "tests/default_harness_error.in";
8+
9+
#[test]
10+
fn test_default_harness_error() {
11+
let dir = setup(DIR, Project::DefaultHarnessError);
12+
cargo_codspeed(&dir)
13+
.arg("build")
14+
.assert()
15+
.failure()
16+
.stderr(contains(
17+
"Error: The following benchmark targets use the default test harness:",
18+
))
19+
// Should report bencher_example (explicit bench with missing harness = false)
20+
.stderr(contains(
21+
"`bencher_example` in package `default-harness-error-test`",
22+
))
23+
// Should report bencher_no_section (no [[bench]] section means default harness)
24+
.stderr(contains(
25+
"`bencher_no_section` in package `default-harness-error-test`",
26+
))
27+
.stderr(contains(
28+
"Codspeed requires benchmark targets to disable the default test harness.",
29+
))
30+
// Ensure the correct benchmark with harness = false is NOT reported
31+
.stderr(contains("bencher_correct").not());
32+
teardown(dir);
33+
}

crates/cargo-codspeed/tests/helpers.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ pub enum Project {
2222
Workspace,
2323
PackageInDeps,
2424
CratesWorkingDirectory,
25+
DefaultHarnessError,
2526
}
2627

2728
pub fn setup(dir: &str, project: Project) -> String {
@@ -38,7 +39,7 @@ pub fn setup(dir: &str, project: Project) -> String {
3839
let package_root = PathBuf::from_str(env!("CARGO_MANIFEST_DIR")).unwrap();
3940
let workspace_root = package_root.parent().unwrap().parent().unwrap();
4041
match project {
41-
Project::Simple | Project::Features => {
42+
Project::Simple | Project::Features | Project::DefaultHarnessError => {
4243
replace_in_file(
4344
tmp_dir.join("Cargo.toml").to_str().unwrap(),
4445
"../../..",

0 commit comments

Comments
 (0)