diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2025-02-21 16:41:49 -0800 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2025-02-22 00:44:35 -0500 |
| commit | 6fe1993d8012eb53dcf5af3af50b0c6279547022 (patch) | |
| tree | 57d4a7c7874118e4ab591e4529a3220e58192221 /lib/std/array_hash_map.zig | |
| parent | f87b443af1f654d3363ce6a1081bdf7932ae354c (diff) | |
| download | zig-6fe1993d8012eb53dcf5af3af50b0c6279547022.tar.gz zig-6fe1993d8012eb53dcf5af3af50b0c6279547022.zip | |
fix ArrayHashMap setKey when store_hash=true
Diffstat (limited to 'lib/std/array_hash_map.zig')
| -rw-r--r-- | lib/std/array_hash_map.zig | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/lib/std/array_hash_map.zig b/lib/std/array_hash_map.zig index 69c5f837cf..0a13cec03f 100644 --- a/lib/std/array_hash_map.zig +++ b/lib/std/array_hash_map.zig @@ -1351,7 +1351,7 @@ pub fn ArrayHashMapUnmanaged( pub fn setKeyContext(self: *Self, gpa: Allocator, index: usize, new_key: K, ctx: Context) Oom!void { const key_ptr = &self.entries.items(.key)[index]; key_ptr.* = new_key; - if (store_hash) self.entries.items(.hash)[index].* = checkedHash(ctx, key_ptr.*); + if (store_hash) self.entries.items(.hash)[index] = checkedHash(ctx, key_ptr.*); try rebuildIndex(self, gpa, undefined); } @@ -2550,10 +2550,26 @@ test "0 sized key and 0 sized value" { try testing.expectEqual(map.get(0), null); } -test "setKey" { +test "setKey storehash true" { const gpa = std.testing.allocator; - var map: AutoArrayHashMapUnmanaged(i32, i32) = .empty; + var map: ArrayHashMapUnmanaged(i32, i32, AutoContext(i32), true) = .empty; + defer map.deinit(gpa); + + try map.put(gpa, 12, 34); + try map.put(gpa, 56, 78); + + try map.setKey(gpa, 0, 42); + try testing.expectEqual(2, map.count()); + try testing.expectEqual(false, map.contains(12)); + try testing.expectEqual(34, map.get(42)); + try testing.expectEqual(78, map.get(56)); +} + +test "setKey storehash false" { + const gpa = std.testing.allocator; + + var map: ArrayHashMapUnmanaged(i32, i32, AutoContext(i32), false) = .empty; defer map.deinit(gpa); try map.put(gpa, 12, 34); |
