Specify behavior of HashSet::insert
`HashSet::insert` does not replace the value with equal value. Fixes #107581.
This commit is contained in:
parent
f3126500f2
commit
e800d5a0ec
@ -875,7 +875,9 @@ where
|
|||||||
/// Returns whether the value was newly inserted. That is:
|
/// Returns whether the value was newly inserted. That is:
|
||||||
///
|
///
|
||||||
/// - If the set did not previously contain this value, `true` is returned.
|
/// - If the set did not previously contain this value, `true` is returned.
|
||||||
/// - If the set already contained this value, `false` is returned.
|
/// - If the set already contained this value, `false` is returned,
|
||||||
|
/// and the set is not modified: original value is not replaced,
|
||||||
|
/// and the value passed as argument is dropped.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
|
@ -3,6 +3,7 @@ use super::HashSet;
|
|||||||
|
|
||||||
use crate::panic::{catch_unwind, AssertUnwindSafe};
|
use crate::panic::{catch_unwind, AssertUnwindSafe};
|
||||||
use crate::sync::atomic::{AtomicU32, Ordering};
|
use crate::sync::atomic::{AtomicU32, Ordering};
|
||||||
|
use crate::sync::Arc;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_zero_capacities() {
|
fn test_zero_capacities() {
|
||||||
@ -502,3 +503,22 @@ fn const_with_hasher() {
|
|||||||
const X: HashSet<(), ()> = HashSet::with_hasher(());
|
const X: HashSet<(), ()> = HashSet::with_hasher(());
|
||||||
assert_eq!(X.len(), 0);
|
assert_eq!(X.len(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_insert_does_not_overwrite_the_value() {
|
||||||
|
let first_value = Arc::new(17);
|
||||||
|
let second_value = Arc::new(17);
|
||||||
|
|
||||||
|
let mut set = HashSet::new();
|
||||||
|
let inserted = set.insert(first_value.clone());
|
||||||
|
assert!(inserted);
|
||||||
|
|
||||||
|
let inserted = set.insert(second_value);
|
||||||
|
assert!(!inserted);
|
||||||
|
|
||||||
|
assert!(
|
||||||
|
Arc::ptr_eq(set.iter().next().unwrap(), &first_value),
|
||||||
|
"Insert must not overwrite the value, so the contained value pointer \
|
||||||
|
must be the same as first value pointer we inserted"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user