Skip to content

Commit 8dffbaf

Browse files
committed
tests: test that cargo-bench works for all compat layers
1 parent f6753d3 commit 8dffbaf

File tree

14 files changed

+301
-7
lines changed

14 files changed

+301
-7
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
*/Cargo.lock
2+
*/target/

crates/cargo-codspeed/tests/simple.in/Cargo.toml renamed to crates/cargo-codspeed/tests/simple-bencher.in/Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ edition = "2021"
55
publish = false
66

77
[dependencies]
8-
bencher = "0.1.5"
98
codspeed = { path = "../../../codspeed" }
10-
codspeed-bencher-compat = { path = "../../../bencher_compat" }
9+
bencher = { package = "codspeed-bencher-compat", path = "../../../bencher_compat" }
1110

1211
[workspace]
1312

crates/cargo-codspeed/tests/simple.in/benches/another_bencher_example.rs renamed to crates/cargo-codspeed/tests/simple-bencher.in/benches/another_bencher_example.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
use bencher::{benchmark_group, benchmark_main, Bencher};
12
use codspeed::codspeed::black_box;
2-
use codspeed_bencher_compat::{benchmark_group, benchmark_main, Bencher};
33

44
pub fn a(bench: &mut Bencher) {
55
bench.iter(|| (0..100).fold(0, |x, y| black_box(x + y)))

crates/cargo-codspeed/tests/simple.in/benches/bencher_example.rs renamed to crates/cargo-codspeed/tests/simple-bencher.in/benches/bencher_example.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
use bencher::{benchmark_group, benchmark_main, Bencher};
12
use codspeed::codspeed::black_box;
2-
use codspeed_bencher_compat::{benchmark_group, benchmark_main, Bencher};
33

44
pub fn a(bench: &mut Bencher) {
55
bench.iter(|| (0..100).fold(0, |x, y| black_box(x + y)))

crates/cargo-codspeed/tests/simple.rs renamed to crates/cargo-codspeed/tests/simple-bencher.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
use assert_cmd::assert::OutputAssertExt;
12
use predicates::str::contains;
23

34
mod helpers;
45
use helpers::*;
56

6-
const DIR: &str = "tests/simple.in";
7+
const DIR: &str = "tests/simple-bencher.in";
78

89
#[test]
910
fn test_simple_run_without_build() {
@@ -69,3 +70,15 @@ fn test_simple_build_and_run_single() {
6970
.stderr(contains("another_bencher_example"));
7071
teardown(dir);
7172
}
73+
74+
#[test]
75+
fn test_simple_cargo_bench_no_run() {
76+
let dir = setup(DIR, Project::Simple);
77+
std::process::Command::new("cargo")
78+
.arg("bench")
79+
.arg("--no-run")
80+
.current_dir(&dir)
81+
.assert()
82+
.success();
83+
teardown(dir);
84+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[package]
2+
name = "simple-criterion"
3+
version = "0.0.0"
4+
edition = "2021"
5+
publish = false
6+
7+
[dependencies]
8+
criterion = { package = "codspeed-criterion-compat", path = "../../../criterion_compat" }
9+
10+
[workspace]
11+
12+
13+
[[bench]]
14+
name = "criterion_example"
15+
harness = false
16+
17+
[[bench]]
18+
name = "another_criterion_example"
19+
harness = false
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
use criterion::{black_box, criterion_group, criterion_main, Criterion};
2+
3+
fn bubble_sort(arr: &mut Vec<i32>) {
4+
let n = arr.len();
5+
for i in 0..n {
6+
for j in 0..(n - i - 1) {
7+
if arr[j] > arr[j + 1] {
8+
arr.swap(j, j + 1);
9+
}
10+
}
11+
}
12+
}
13+
14+
fn criterion_benchmark(c: &mut Criterion) {
15+
c.bench_function("bubble sort", |b| {
16+
b.iter(|| {
17+
let mut data = vec![64, 34, 25, 12, 22, 11, 90];
18+
bubble_sort(black_box(&mut data));
19+
})
20+
});
21+
}
22+
23+
criterion_group!(benches, criterion_benchmark);
24+
criterion_main!(benches);
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
use criterion::{black_box, criterion_group, criterion_main, Criterion};
2+
3+
fn fibonacci(n: u64) -> u64 {
4+
match n {
5+
0 => 1,
6+
1 => 1,
7+
n => fibonacci(n - 1) + fibonacci(n - 2),
8+
}
9+
}
10+
11+
fn criterion_benchmark(c: &mut Criterion) {
12+
c.bench_function("fib 20", |b| b.iter(|| fibonacci(black_box(20))));
13+
}
14+
15+
criterion_group!(benches, criterion_benchmark);
16+
criterion_main!(benches);
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
use assert_cmd::assert::OutputAssertExt;
2+
use predicates::str::contains;
3+
4+
mod helpers;
5+
use helpers::*;
6+
7+
const DIR: &str = "tests/simple-criterion.in";
8+
9+
#[test]
10+
fn test_criterion_run_without_build() {
11+
let dir = setup(DIR, Project::Simple);
12+
cargo_codspeed(&dir)
13+
.arg("run")
14+
.assert()
15+
.failure()
16+
.stderr(contains("Error: No benchmarks found."));
17+
teardown(dir);
18+
}
19+
20+
#[test]
21+
fn test_criterion_build() {
22+
let dir = setup(DIR, Project::Simple);
23+
cargo_codspeed(&dir)
24+
.arg("build")
25+
.assert()
26+
.success()
27+
.stderr(contains("Built 2 benchmark suite(s)"));
28+
teardown(dir);
29+
}
30+
31+
#[test]
32+
fn test_criterion_build_and_run() {
33+
let dir = setup(DIR, Project::Simple);
34+
cargo_codspeed(&dir).arg("build").assert().success();
35+
cargo_codspeed(&dir)
36+
.arg("run")
37+
.assert()
38+
.success()
39+
.stderr(contains("Finished running 2 benchmark suite(s)"));
40+
teardown(dir);
41+
}
42+
43+
#[test]
44+
fn test_criterion_build_single() {
45+
let dir = setup(DIR, Project::Simple);
46+
cargo_codspeed(&dir)
47+
.arg("build")
48+
.arg("another_criterion_example")
49+
.assert()
50+
.success()
51+
.stderr(contains("Built 1 benchmark suite(s)"))
52+
.stderr(contains("another_criterion_example"));
53+
teardown(dir);
54+
}
55+
56+
#[test]
57+
fn test_criterion_build_and_run_single() {
58+
let dir = setup(DIR, Project::Simple);
59+
cargo_codspeed(&dir)
60+
.arg("build")
61+
.arg("another_criterion_example")
62+
.assert()
63+
.success();
64+
cargo_codspeed(&dir)
65+
.arg("run")
66+
.arg("another_criterion_example")
67+
.assert()
68+
.success()
69+
.stderr(contains("Finished running 1 benchmark suite(s)"))
70+
.stderr(contains("another_criterion_example"));
71+
teardown(dir);
72+
}
73+
74+
#[test]
75+
fn test_criterion_cargo_bench_no_run() {
76+
let dir = setup(DIR, Project::Simple);
77+
std::process::Command::new("cargo")
78+
.arg("bench")
79+
.arg("--no-run")
80+
.current_dir(&dir)
81+
.assert()
82+
.success();
83+
teardown(dir);
84+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[package]
2+
name = "simple-divan"
3+
version = "0.0.0"
4+
edition = "2021"
5+
publish = false
6+
7+
[dependencies]
8+
divan = { package = "codspeed-divan-compat", path = "../../../divan_compat" }
9+
10+
[workspace]
11+
12+
13+
[[bench]]
14+
name = "divan_example"
15+
harness = false
16+
17+
[[bench]]
18+
name = "another_divan_example"
19+
harness = false

0 commit comments

Comments
 (0)