@@ -4017,23 +4017,23 @@ mod test_map {
4017
4017
} ) ;
4018
4018
4019
4019
match entry {
4020
- Vacant ( _) => panic ! ( ) ,
4021
4020
Occupied ( e) => {
4022
4021
assert_eq ! ( e. key( ) , & key) ;
4023
4022
assert_eq ! ( e. get( ) , & new_value) ;
4024
4023
}
4024
+ Vacant ( _) => panic ! ( ) ,
4025
4025
}
4026
4026
4027
4027
assert_eq ! ( a[ key] , new_value) ;
4028
4028
assert_eq ! ( a. len( ) , 1 ) ;
4029
4029
4030
4030
let entry = match a. entry ( key) {
4031
- Vacant ( _) => unreachable ! ( ) ,
4032
4031
Occupied ( e) => e. replace_entry_with ( |k, v| {
4033
4032
assert_eq ! ( k, & key) ;
4034
4033
assert_eq ! ( v, new_value) ;
4035
4034
None
4036
4035
} ) ,
4036
+ Vacant ( _) => panic ! ( ) ,
4037
4037
} ;
4038
4038
4039
4039
match entry {
@@ -4046,17 +4046,14 @@ mod test_map {
4046
4046
}
4047
4047
4048
4048
#[ test]
4049
- fn test_entry_replace_entry_with ( ) {
4049
+ fn test_entry_and_replace_entry_with ( ) {
4050
4050
let mut a = HashMap :: new ( ) ;
4051
4051
4052
4052
let key = "a key" ;
4053
4053
let value = "an initial value" ;
4054
4054
let new_value = "a new value" ;
4055
4055
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 ! ( ) ) ;
4060
4057
4061
4058
match entry {
4062
4059
Vacant ( e) => assert_eq ! ( e. key( ) , & key) ,
@@ -4097,6 +4094,78 @@ mod test_map {
4097
4094
assert_eq ! ( a. len( ) , 0 ) ;
4098
4095
}
4099
4096
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
+
4100
4169
#[ test]
4101
4170
fn test_replace_entry_with_doesnt_corrupt ( ) {
4102
4171
#![ allow( deprecated) ] //rand
0 commit comments