Skip to content

Commit

Permalink
Add bench for backtracking
Browse files Browse the repository at this point in the history
  • Loading branch information
x-hgg-x committed Nov 14, 2024
1 parent 33f68e4 commit 19aa329
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 4 deletions.
7 changes: 6 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ include = ["Cargo.toml", "LICENSE", "README.md", "src/**", "tests/**", "examples

[dependencies]
indexmap = "2.6.0"
log = "0.4.22" # for debug logs in tests
# for debug logs in tests
log = "0.4.22"
priority-queue = "2.1.1"
rustc-hash = ">=1.0.0, <3.0.0"
serde = { version = "1.0", features = ["derive"], optional = true }
Expand All @@ -42,6 +43,10 @@ version-ranges = { version = "0.1.0", path = "version-ranges", features = ["prop
[features]
serde = ["dep:serde", "version-ranges/serde"]

[[bench]]
name = "backtracking"
harness = false

[[bench]]
name = "large_case"
harness = false
Expand Down
38 changes: 38 additions & 0 deletions benches/backtracking.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// SPDX-License-Identifier: MPL-2.0

//! This bench monitors the performance of backtracking and term intersection.
//!
//! Dependencies are constructed in a way that all versions need to be tested before
//! pubgrub can determine that no solution exists.
use criterion::*;
use pubgrub::OfflineDependencyProvider;
use version_ranges::Ranges;

fn bench(c: &mut Criterion, case: &str, package_count: u32, version_count: u32) {
let mut dependency_provider = OfflineDependencyProvider::<u32, Ranges<u32>>::new();
let r = Ranges::strictly_lower_than(version_count);
dependency_provider.add_dependencies(0u32, 0u32, [(1u32, r)]);

for n in 1..package_count {
for v in 0..version_count {
let r = Ranges::strictly_lower_than(v);
dependency_provider.add_dependencies(n, v, [(n + 1, r)]);
}
}

c.bench_function(case, |b| {
b.iter(|| {
let _ = pubgrub::resolve(&dependency_provider, 0u32, 0u32);
})
});
}

fn bench_group(c: &mut Criterion) {
bench(c, "backtracking_small", 5, 60);
bench(c, "backtracking_medium", 5, 200);
bench(c, "backtracking_large", 5, 500);
}

criterion_group!(benches, bench_group);
criterion_main!(benches);
1 change: 1 addition & 0 deletions benches/large_case.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// SPDX-License-Identifier: MPL-2.0

use std::time::Duration;

use criterion::*;
Expand Down
4 changes: 2 additions & 2 deletions benches/sudoku.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ fn from_board(b: &str) -> Vec<(SudokuPackage, Range<Arc<usize>>)> {
if let Some(val) = val.chars().next().unwrap().to_digit(10) {
out.push((
SudokuPackage::Cell {
row: (row + 1).try_into().unwrap(),
col: (col + 1).try_into().unwrap(),
row: row + 1,
col: col + 1,
},
Range::singleton(val as usize),
));
Expand Down
2 changes: 1 addition & 1 deletion test-examples/large_case_u16_NumberVersion.ron
Original file line number Diff line number Diff line change
Expand Up @@ -5521,4 +5521,4 @@
18: {},
19: {},
},
}
}

0 comments on commit 19aa329

Please sign in to comment.