Skip to content

Commit c85d832

Browse files
committed
test: Avoid needlessly cloning in the sat resolver
1 parent af9b2d7 commit c85d832

File tree

1 file changed

+13
-22
lines changed
  • crates/resolver-tests/src

1 file changed

+13
-22
lines changed

crates/resolver-tests/src/sat.rs

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ fn process_pkg_features(
180180
pkg_feature_var_map: &HashMap<InternedString, varisat::Var>,
181181
pkg_dependencies: &[Dependency],
182182
pkg_features: &FeatureMap,
183-
check_dev_dependencies: bool,
184183
) {
185184
let optional_dependencies = pkg_dependencies
186185
.iter()
@@ -203,7 +202,7 @@ fn process_pkg_features(
203202
FeatureValue::Dep { dep_name } => {
204203
// Add a clause for each dependency with the provided name (normal/build/dev with target)
205204
for (&(dep_kind, _), &dep_var) in &var_for_is_dependencies_used[&dep_name] {
206-
if dep_kind == DepKind::Development && !check_dev_dependencies {
205+
if dep_kind == DepKind::Development {
207206
continue;
208207
}
209208
solver.add_clause(&[pkg_feature_var.negative(), dep_var.positive()]);
@@ -227,7 +226,7 @@ fn process_pkg_features(
227226
// Add clauses for each dependency with the provided name (normal/build/dev with target)
228227
let dep_var_map = &var_for_is_dependencies_used[&dep_name];
229228
for (&(dep_kind, dep_platform), &dep_var) in dep_var_map {
230-
if dep_kind == DepKind::Development && !check_dev_dependencies {
229+
if dep_kind == DepKind::Development {
231230
continue;
232231
}
233232

@@ -274,36 +273,32 @@ fn process_compatible_dep_summaries(
274273
}
275274

276275
let (name, kind, platform) = (dep.name_in_toml(), dep.kind(), dep.platform());
277-
let dep_var_map = &var_for_is_dependencies_used[&name];
278-
let dep_var = dep_var_map[&(kind, platform)];
279-
276+
let dep_var = var_for_is_dependencies_used[&name][&(kind, platform)];
280277
let dep_feature_var_map = &var_for_is_dependencies_features_used[&name][&(kind, platform)];
281278

282-
let compatible_summaries = by_name
279+
let compatible_pkg_ids = by_name
283280
.get(&dep.package_name())
284281
.into_iter()
285282
.flatten()
286283
.filter(|s| dep.matches(s))
287284
.filter(|s| dep.features().iter().all(|f| s.features().contains_key(f)))
288-
.cloned()
285+
.map(|s| s.package_id())
289286
.collect::<Vec<_>>();
290287

291288
// At least one compatible package should be activated
292-
let dep_clause = compatible_summaries
289+
let dep_clause = compatible_pkg_ids
293290
.iter()
294-
.map(|s| var_for_is_packages_used[&s.package_id()].positive())
291+
.map(|id| var_for_is_packages_used[&id].positive())
295292
.chain([dep_var.negative()])
296293
.collect::<Vec<_>>();
297294

298295
solver.add_clause(&dep_clause);
299296

300297
for (&feature_name, &dep_feature_var) in dep_feature_var_map {
301298
// At least one compatible package with the additional feature should be activated
302-
let dep_feature_clause = compatible_summaries
299+
let dep_feature_clause = compatible_pkg_ids
303300
.iter()
304-
.filter_map(|s| {
305-
var_for_is_packages_features_used[&s.package_id()].get(&feature_name)
306-
})
301+
.filter_map(|id| var_for_is_packages_features_used[&id].get(&feature_name))
307302
.map(|var| var.positive())
308303
.chain([dep_feature_var.negative()])
309304
.collect::<Vec<_>>();
@@ -315,10 +310,9 @@ fn process_compatible_dep_summaries(
315310
// For the selected package for this dependency, the `"default"` feature should be activated if it exists
316311
let mut dep_default_clause = vec![dep_var.negative()];
317312

318-
for s in &compatible_summaries {
319-
let s_pkg_id = s.package_id();
320-
let s_var = var_for_is_packages_used[&s_pkg_id];
321-
let s_feature_var_map = &var_for_is_packages_features_used[&s_pkg_id];
313+
for &id in &compatible_pkg_ids {
314+
let s_var = var_for_is_packages_used[&id];
315+
let s_feature_var_map = &var_for_is_packages_features_used[&id];
322316

323317
if let Some(s_default_feature_var) = s_feature_var_map.get(&INTERNED_DEFAULT) {
324318
dep_default_clause
@@ -352,8 +346,6 @@ pub struct SatResolver {
352346

353347
impl SatResolver {
354348
pub fn new<'a>(registry: impl IntoIterator<Item = &'a Summary>) -> Self {
355-
let check_dev_dependencies = false;
356-
357349
let mut by_name: HashMap<InternedString, Vec<Summary>> = HashMap::new();
358350
for pkg in registry {
359351
by_name.entry(pkg.name()).or_default().push(pkg.clone());
@@ -427,7 +419,6 @@ impl SatResolver {
427419
&var_for_is_packages_features_used[&pkg_id],
428420
pkg_dependencies,
429421
pkg_features,
430-
check_dev_dependencies,
431422
);
432423

433424
process_compatible_dep_summaries(
@@ -438,7 +429,7 @@ impl SatResolver {
438429
&var_for_is_packages_features_used,
439430
&by_name,
440431
pkg_dependencies,
441-
check_dev_dependencies,
432+
false,
442433
);
443434
}
444435

0 commit comments

Comments
 (0)