| ... | @@ -1113,6 +1113,7 @@ pub fn HashMapUnmanaged( | ... | @@ -1113,6 +1113,7 @@ pub fn HashMapUnmanaged( |
| 1113 | old_key.* = undefined; | 1113 | old_key.* = undefined; |
| 1114 | old_val.* = undefined; | 1114 | old_val.* = undefined; |
| 1115 | self.size -= 1; | 1115 | self.size -= 1; |
| | 1116 | self.available += 1; |
| 1116 | return result; | 1117 | return result; |
| 1117 | } | 1118 | } |
| 1118 | | 1119 | |
| ... | @@ -2193,3 +2194,27 @@ test "std.hash_map removeByPtr 0 sized key" { | ... | @@ -2193,3 +2194,27 @@ test "std.hash_map removeByPtr 0 sized key" { |
| 2193 | | 2194 | |
| 2194 | try testing.expect(map.count() == 0); | 2195 | try testing.expect(map.count() == 0); |
| 2195 | } | 2196 | } |
| | 2197 | |
| | 2198 | test "std.hash_map repeat fetchRemove" { |
| | 2199 | var map = AutoHashMapUnmanaged(u64, void){}; |
| | 2200 | defer map.deinit(testing.allocator); |
| | 2201 | |
| | 2202 | try map.ensureTotalCapacity(testing.allocator, 4); |
| | 2203 | |
| | 2204 | map.putAssumeCapacity(0, {}); |
| | 2205 | map.putAssumeCapacity(1, {}); |
| | 2206 | map.putAssumeCapacity(2, {}); |
| | 2207 | map.putAssumeCapacity(3, {}); |
| | 2208 | |
| | 2209 | // fetchRemove() should make slots available. |
| | 2210 | var i: usize = 0; |
| | 2211 | while (i < 10) : (i += 1) { |
| | 2212 | try testing.expect(map.fetchRemove(3) != null); |
| | 2213 | map.putAssumeCapacity(3, {}); |
| | 2214 | } |
| | 2215 | |
| | 2216 | try testing.expect(map.get(0) != null); |
| | 2217 | try testing.expect(map.get(1) != null); |
| | 2218 | try testing.expect(map.get(2) != null); |
| | 2219 | try testing.expect(map.get(3) != null); |
| | 2220 | } |