diff --git a/src/store/weight.rs b/src/store/weight.rs index 4199ede..11ef612 100644 --- a/src/store/weight.rs +++ b/src/store/weight.rs @@ -501,7 +501,16 @@ where pub fn try_insert(&mut self, key: K, value: Arc) -> Result>, StoreFull> { let new_weight = self.compute_weight(value.as_ref()); if let Some(entry) = self.map.get_mut(&key) { - let next_total = self.total_weight - entry.weight + new_weight; + debug_assert!( + self.total_weight >= entry.weight, + "WeightStore invariant violated: total_weight ({}) is less than entry.weight ({})", + self.total_weight, + entry.weight + ); + let next_total = self + .total_weight + .saturating_sub(entry.weight) + .saturating_add(new_weight); if next_total > self.capacity_weight { return Err(StoreFull); } @@ -551,6 +560,7 @@ where /// ``` pub fn remove(&mut self, key: &K) -> Option> { let entry = self.map.remove(key)?; + debug_assert!(self.total_weight >= entry.weight, "total_weight underflow in remove"); self.total_weight = self.total_weight.saturating_sub(entry.weight); self.metrics.inc_remove(); Some(entry.value)