@@ -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