Fix typo incrementing instead of decrementing (#595)

* fix: typo incrementing instead of decrementing

* Add tests for MostSeen decrement bug 

This bug requires a specific set of circumstances to trigger
and become visible:
1. decrement a label that is non-zero but not first
2. repeat the decrement at least best_count()/2 times
3. increment that label
4. check the best count

---------

Co-authored-by: teor <teor@riseup.net>
This commit is contained in:
clostao
2025-01-10 15:53:42 +01:00
committed by GitHub
parent d4a557c33b
commit 4161d9a2a5
+7 -1
View File
@@ -124,7 +124,7 @@ impl<T: Hash + Eq + Clone> MostSeen<T> {
// Item is in the map; not the best anyway. decrement count.
if let Some(count) = self.others.get_mut(item) {
*count += 1;
*count = count.saturating_sub(1);
}
ChangeResult::NoChange
}
@@ -248,5 +248,11 @@ mod test {
assert!(res.has_changed());
assert_eq!(a.best_count(), 2);
assert_eq!(*a.best(), "First"); // First is now ahead
a.remove(&"Third"); // 0, or 2 with bug #595
a.remove(&"Third"); // 0, or 4 with bug #595
a.insert(&"Third"); // 1, or 5 with bug #595
assert_eq!(a.best_count(), 2);
assert_eq!(*a.best(), "First"); // First is still ahead
}
}