fix(simulation): resolve clippy warnings in atlas modules

Replace HashMap/HashSet with BTreeMap/BTreeSet per D-030 determinism
rule. Fix while_let_loop, map_or simplification, collapsible if,
unsigned_abs casting, iterator indexing, and redundant wildcard arms.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-02 22:52:15 +02:00
co-authored by Claude Opus 4.6
parent 718fcd0510
commit 6582ee4cca
6 changed files with 33 additions and 40 deletions
+14 -18
View File
@@ -181,8 +181,8 @@ fn flow_accumulation(fdir: &[i8], w: usize, h: usize) -> Vec<i32> {
}
let mut queue = VecDeque::new();
for i in 0..n {
if in_degree[i] == 0 {
for (i, &deg) in in_degree.iter().enumerate().take(n) {
if deg == 0 {
queue.push_back(i);
}
}
@@ -314,11 +314,9 @@ fn label_basins(fdir: &[i8], accum: &[i32], w: usize, h: usize) -> Vec<i32> {
for &(dr, dc) in &D8 {
let nr = r as i32 + dr;
let nc = (c as i32 + dc).rem_euclid(w as i32) as usize;
if nr >= 0 && nr < h as i32 {
if accum[nr as usize * w + nc] > accum[i] {
is_max = false;
break;
}
if nr >= 0 && nr < h as i32 && accum[nr as usize * w + nc] > accum[i] {
is_max = false;
break;
}
}
if is_max {
@@ -392,7 +390,7 @@ fn merge_small_basins(
for _ in 0..200 {
// Count basin sizes.
let mut sizes: std::collections::HashMap<i32, usize> = std::collections::HashMap::new();
let mut sizes: std::collections::BTreeMap<i32, usize> = std::collections::BTreeMap::new();
for &l in &labels {
*sizes.entry(l).or_insert(0) += 1;
}
@@ -432,15 +430,13 @@ fn merge_small_basins(
// Renumber contiguously from 0.
let unique: Vec<i32> = {
let mut set: std::collections::HashSet<i32> = std::collections::HashSet::new();
let mut set: std::collections::BTreeSet<i32> = std::collections::BTreeSet::new();
for &l in &labels {
set.insert(l);
}
let mut v: Vec<i32> = set.into_iter().collect();
v.sort();
v
set.into_iter().collect()
};
let remap: std::collections::HashMap<i32, i32> = unique
let remap: std::collections::BTreeMap<i32, i32> = unique
.iter()
.enumerate()
.map(|(new, &old)| (old, new as i32))
@@ -455,13 +451,13 @@ fn merge_small_basins(
fn find_largest_neighbor(
labels: &[i32],
target_id: i32,
sizes: &std::collections::HashMap<i32, usize>,
sizes: &std::collections::BTreeMap<i32, usize>,
w: usize,
h: usize,
) -> Option<i32> {
let n = w * h;
let mut neighbor_sizes: std::collections::HashMap<i32, usize> =
std::collections::HashMap::new();
let mut neighbor_sizes: std::collections::BTreeMap<i32, usize> =
std::collections::BTreeMap::new();
for i in 0..n {
if labels[i] != target_id {
@@ -497,8 +493,8 @@ fn find_largest_neighbor(
fn build_basins(labels: &[i32], w: usize, h: usize) -> Vec<DrainageBasin> {
let n = w * h;
let mut basin_map: std::collections::HashMap<i32, Vec<usize>> =
std::collections::HashMap::new();
let mut basin_map: std::collections::BTreeMap<i32, Vec<usize>> =
std::collections::BTreeMap::new();
for (i, &l) in labels.iter().enumerate() {
basin_map.entry(l).or_default().push(i);