Skip to content

Commit 4c3f4b9

Browse files
committed
Merge changes from replace-entry-with
2 parents 30103a5 + 2325615 commit 4c3f4b9

File tree

1 file changed

+76
-7
lines changed

1 file changed

+76
-7
lines changed

src/map.rs

Lines changed: 76 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4017,23 +4017,23 @@ mod test_map {
40174017
});
40184018

40194019
match entry {
4020-
Vacant(_) => panic!(),
40214020
Occupied(e) => {
40224021
assert_eq!(e.key(), &key);
40234022
assert_eq!(e.get(), &new_value);
40244023
}
4024+
Vacant(_) => panic!(),
40254025
}
40264026

40274027
assert_eq!(a[key], new_value);
40284028
assert_eq!(a.len(), 1);
40294029

40304030
let entry = match a.entry(key) {
4031-
Vacant(_) => unreachable!(),
40324031
Occupied(e) => e.replace_entry_with(|k, v| {
40334032
assert_eq!(k, &key);
40344033
assert_eq!(v, new_value);
40354034
None
40364035
}),
4036+
Vacant(_) => panic!(),
40374037
};
40384038

40394039
match entry {
@@ -4046,17 +4046,14 @@ mod test_map {
40464046
}
40474047

40484048
#[test]
4049-
fn test_entry_replace_entry_with() {
4049+
fn test_entry_and_replace_entry_with() {
40504050
let mut a = HashMap::new();
40514051

40524052
let key = "a key";
40534053
let value = "an initial value";
40544054
let new_value = "a new value";
40554055

4056-
let entry = match a.entry(key) {
4057-
e @ Vacant(_) => e.and_replace_entry_with(|_, _| panic!()),
4058-
Occupied(_) => unreachable!(),
4059-
};
4056+
let entry = a.entry(key).and_replace_entry_with(|_, _| panic!());
40604057

40614058
match entry {
40624059
Vacant(e) => assert_eq!(e.key(), &key),
@@ -4097,6 +4094,78 @@ mod test_map {
40974094
assert_eq!(a.len(), 0);
40984095
}
40994096

4097+
#[test]
4098+
fn test_raw_occupied_entry_replace_entry_with() {
4099+
let mut a = HashMap::new();
4100+
4101+
let key = "a key";
4102+
let value = "an initial value";
4103+
let new_value = "a new value";
4104+
4105+
a.raw_entry_mut()
4106+
.from_key(&key)
4107+
.insert(key, value)
4108+
.replace_entry_with(|k, v| {
4109+
assert_eq!(k, &key);
4110+
assert_eq!(v, value);
4111+
Some(new_value)
4112+
});
4113+
4114+
assert_eq!(a[key], new_value);
4115+
assert_eq!(a.len(), 1);
4116+
4117+
match a.raw_entry_mut().from_key(&key) {
4118+
RawEntryMut::Occupied(e) => {
4119+
e.replace_entry_with(|k, v| {
4120+
assert_eq!(k, &key);
4121+
assert_eq!(v, new_value);
4122+
None
4123+
});
4124+
}
4125+
RawEntryMut::Vacant(_) => panic!(),
4126+
}
4127+
4128+
assert!(!a.contains_key(key));
4129+
assert_eq!(a.len(), 0);
4130+
}
4131+
4132+
#[test]
4133+
fn test_raw_entry_and_replace_entry_with() {
4134+
let mut a = HashMap::new();
4135+
4136+
let key = "a key";
4137+
let value = "an initial value";
4138+
let new_value = "a new value";
4139+
4140+
a.raw_entry_mut()
4141+
.from_key(&key)
4142+
.and_replace_entry_with(|_, _| panic!("Can't replace a VacantEntry"));
4143+
4144+
a.insert(key, value);
4145+
4146+
a.raw_entry_mut()
4147+
.from_key(&key)
4148+
.and_replace_entry_with(|k, v| {
4149+
assert_eq!(k, &key);
4150+
assert_eq!(v, value);
4151+
Some(new_value)
4152+
});
4153+
4154+
assert_eq!(a[key], new_value);
4155+
assert_eq!(a.len(), 1);
4156+
4157+
a.raw_entry_mut()
4158+
.from_key(&key)
4159+
.and_replace_entry_with(|k, v| {
4160+
assert_eq!(k, &key);
4161+
assert_eq!(v, new_value);
4162+
None
4163+
});
4164+
4165+
assert!(!a.contains_key(key));
4166+
assert_eq!(a.len(), 0);
4167+
}
4168+
41004169
#[test]
41014170
fn test_replace_entry_with_doesnt_corrupt() {
41024171
#![allow(deprecated)] //rand

0 commit comments

Comments
 (0)