aboutsummaryrefslogtreecommitdiff
path: root/lib/std/array_hash_map.zig
diff options
context:
space:
mode:
authorriverbl <94326797+riverbl@users.noreply.github.com>2022-01-24 15:31:27 +0000
committerGitHub <noreply@github.com>2022-01-24 17:31:27 +0200
commit1f10cf4edf2b645e63dedc42f5d7475914bf2311 (patch)
treefdc16957a46c7f8c81035e95e189e16845bea5bb /lib/std/array_hash_map.zig
parentc54a7ca4b25a0ffe080a80fb19986142c98b124e (diff)
downloadzig-1f10cf4edf2b645e63dedc42f5d7475914bf2311.tar.gz
zig-1f10cf4edf2b645e63dedc42f5d7475914bf2311.zip
MultiArrayList: Fix error when struct is 0 sized
Also fixes error with ArrayHashMap when both key and value are 0 sized
Diffstat (limited to 'lib/std/array_hash_map.zig')
-rw-r--r--lib/std/array_hash_map.zig29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/std/array_hash_map.zig b/lib/std/array_hash_map.zig
index 7ebafc0a1b..efd75a0fee 100644
--- a/lib/std/array_hash_map.zig
+++ b/lib/std/array_hash_map.zig
@@ -2215,6 +2215,35 @@ test "auto store_hash" {
try testing.expect(meta.fieldInfo(HasExpensiveEqlUn.Data, .hash).field_type != void);
}
+test "0 sized key" {
+ var map = AutoArrayHashMap(u0, i32).init(std.testing.allocator);
+ defer map.deinit();
+
+ try testing.expectEqual(map.get(0), null);
+
+ try map.put(0, 5);
+ try testing.expectEqual(map.get(0), 5);
+
+ try map.put(0, 10);
+ try testing.expectEqual(map.get(0), 10);
+
+ try testing.expectEqual(map.swapRemove(0), true);
+ try testing.expectEqual(map.get(0), null);
+}
+
+test "0 sized key and 0 sized value" {
+ var map = AutoArrayHashMap(u0, u0).init(std.testing.allocator);
+ defer map.deinit();
+
+ try testing.expectEqual(map.get(0), null);
+
+ try map.put(0, 0);
+ try testing.expectEqual(map.get(0), 0);
+
+ try testing.expectEqual(map.swapRemove(0), true);
+ try testing.expectEqual(map.get(0), null);
+}
+
pub fn getHashPtrAddrFn(comptime K: type, comptime Context: type) (fn (Context, K) u32) {
return struct {
fn hash(ctx: Context, key: K) u32 {