authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-02-21 16:41:49-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-02-22 00:44:35-05:00
log6fe1993d8012eb53dcf5af3af50b0c6279547022
tree57d4a7c7874118e4ab591e4529a3220e58192221
parentf87b443af1f654d3363ce6a1081bdf7932ae354c

fix ArrayHashMap setKey when store_hash=true


1 files changed, 19 insertions(+), 3 deletions(-)

lib/std/array_hash_map.zig+19-3
...@@ -1351,7 +1351,7 @@ pub fn ArrayHashMapUnmanaged(...@@ -1351,7 +1351,7 @@ pub fn ArrayHashMapUnmanaged(
1351 pub fn setKeyContext(self: *Self, gpa: Allocator, index: usize, new_key: K, ctx: Context) Oom!void {1351 pub fn setKeyContext(self: *Self, gpa: Allocator, index: usize, new_key: K, ctx: Context) Oom!void {
1352 const key_ptr = &self.entries.items(.key)[index];1352 const key_ptr = &self.entries.items(.key)[index];
1353 key_ptr.* = new_key;1353 key_ptr.* = new_key;
1354 if (store_hash) self.entries.items(.hash)[index].* = checkedHash(ctx, key_ptr.*);1354 if (store_hash) self.entries.items(.hash)[index] = checkedHash(ctx, key_ptr.*);
1355 try rebuildIndex(self, gpa, undefined);1355 try rebuildIndex(self, gpa, undefined);
1356 }1356 }
13571357
...@@ -2550,10 +2550,26 @@ test "0 sized key and 0 sized value" {...@@ -2550,10 +2550,26 @@ test "0 sized key and 0 sized value" {
2550 try testing.expectEqual(map.get(0), null);2550 try testing.expectEqual(map.get(0), null);
2551}2551}
25522552
2553test "setKey" {2553test "setKey storehash true" {
2554 const gpa = std.testing.allocator;2554 const gpa = std.testing.allocator;
25552555
2556 var map: AutoArrayHashMapUnmanaged(i32, i32) = .empty;2556 var map: ArrayHashMapUnmanaged(i32, i32, AutoContext(i32), true) = .empty;
2557 defer map.deinit(gpa);
2558
2559 try map.put(gpa, 12, 34);
2560 try map.put(gpa, 56, 78);
2561
2562 try map.setKey(gpa, 0, 42);
2563 try testing.expectEqual(2, map.count());
2564 try testing.expectEqual(false, map.contains(12));
2565 try testing.expectEqual(34, map.get(42));
2566 try testing.expectEqual(78, map.get(56));
2567}
2568
2569test "setKey storehash false" {
2570 const gpa = std.testing.allocator;
2571
2572 var map: ArrayHashMapUnmanaged(i32, i32, AutoContext(i32), false) = .empty;
2557 defer map.deinit(gpa);2573 defer map.deinit(gpa);
25582574
2559 try map.put(gpa, 12, 34);2575 try map.put(gpa, 12, 34);