Skip to content

Commit 25a1c8d

Browse files
authored
test: switch to criterion (#47)
1 parent 0f5c913 commit 25a1c8d

File tree

2 files changed

+38
-16
lines changed

2 files changed

+38
-16
lines changed

Cargo.toml

+6
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,9 @@ serde = { version = "1.0", features = ["derive"], optional = true }
2424
proptest = "0.10.1"
2525
ron="0.6"
2626
varisat="0.2.2"
27+
criterion = "0.3"
28+
29+
[[bench]]
30+
name = "large_case"
31+
harness = false
32+
required-features = ["serde"]

benches/large_case.rs

+32-16
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,38 @@
11
// SPDX-License-Identifier: MPL-2.0
2+
use std::time::Duration;
23

3-
#![feature(test)]
4-
extern crate test;
5-
use test::Bencher;
4+
extern crate criterion;
5+
use self::criterion::*;
66

7-
use pubgrub::solver::{resolve, OfflineDependencyProvider};
7+
use pubgrub::solver::{resolve, DependencyProvider, OfflineDependencyProvider};
88
use pubgrub::version::NumberVersion;
99

10-
#[cfg(feature = "serde")]
11-
#[bench]
12-
/// This is an entirely synthetic benchmark. It may not be realistic.
13-
fn large_case(b: &mut Bencher) {
14-
let s = std::fs::read_to_string("test-examples/large_case_u16_NumberVersion.ron").unwrap();
15-
let dependency_provider: OfflineDependencyProvider<u16, NumberVersion> =
16-
ron::de::from_str(&s).unwrap();
17-
18-
// bench
19-
b.iter(|| {
20-
let _ = resolve(&dependency_provider, 0, 0);
21-
});
10+
fn bench_nested(c: &mut Criterion) {
11+
let mut group = c.benchmark_group("large_cases");
12+
group.measurement_time(Duration::from_secs(20));
13+
14+
for case in std::fs::read_dir("test-examples").unwrap() {
15+
let case = case.unwrap().path();
16+
17+
group.bench_function(
18+
format!("{}", case.file_name().unwrap().to_string_lossy()),
19+
|b| {
20+
let s = std::fs::read_to_string(&case).unwrap();
21+
let dependency_provider: OfflineDependencyProvider<u16, NumberVersion> =
22+
ron::de::from_str(&s).unwrap();
23+
let all_versions = dependency_provider.list_available_versions(&0).unwrap();
24+
25+
b.iter(|| {
26+
for &n in &all_versions {
27+
let _ = resolve(&dependency_provider, 0, n);
28+
}
29+
});
30+
},
31+
);
32+
}
33+
34+
group.finish();
2235
}
36+
37+
criterion_group!(benches, bench_nested);
38+
criterion_main!(benches);

0 commit comments

Comments
 (0)