aboutsummaryrefslogtreecommitdiff
path: root/lib/std/array_hash_map.zig
diff options
context:
space:
mode:
authorMatthew Borkowski <matthew.h.borkowski@gmail.com>2021-05-10 19:10:14 -0400
committerVeikka Tuominen <git@vexu.eu>2021-05-11 16:14:23 +0300
commit75ed835d085e2f9dd042a1b39a61df95248a76df (patch)
tree67f95f3eb810ce9abdf6c2c742d8833af1457589 /lib/std/array_hash_map.zig
parentac546f56eb2b9fd50a69f1d0bda3d0d070b76f52 (diff)
downloadzig-75ed835d085e2f9dd042a1b39a61df95248a76df.tar.gz
zig-75ed835d085e2f9dd042a1b39a61df95248a76df.zip
fix AutoArrayHashMap's store_hash logic
Diffstat (limited to 'lib/std/array_hash_map.zig')
-rw-r--r--lib/std/array_hash_map.zig20
1 files changed, 16 insertions, 4 deletions
diff --git a/lib/std/array_hash_map.zig b/lib/std/array_hash_map.zig
index 25a1aead52..4759376f7e 100644
--- a/lib/std/array_hash_map.zig
+++ b/lib/std/array_hash_map.zig
@@ -18,11 +18,11 @@ const builtin = @import("builtin");
const hash_map = @This();
pub fn AutoArrayHashMap(comptime K: type, comptime V: type) type {
- return ArrayHashMap(K, V, getAutoHashFn(K), getAutoEqlFn(K), autoEqlIsCheap(K));
+ return ArrayHashMap(K, V, getAutoHashFn(K), getAutoEqlFn(K), !autoEqlIsCheap(K));
}
pub fn AutoArrayHashMapUnmanaged(comptime K: type, comptime V: type) type {
- return ArrayHashMapUnmanaged(K, V, getAutoHashFn(K), getAutoEqlFn(K), autoEqlIsCheap(K));
+ return ArrayHashMapUnmanaged(K, V, getAutoHashFn(K), getAutoEqlFn(K), !autoEqlIsCheap(K));
}
/// Builtin hashmap for strings as keys.
@@ -1294,7 +1294,7 @@ test "reIndex" {
try al.append(std.testing.allocator, .{
.key = i,
.value = i * 10,
- .hash = hash(i),
+ .hash = {},
});
}
@@ -1321,7 +1321,7 @@ test "fromOwnedArrayList" {
try al.append(std.testing.allocator, .{
.key = i,
.value = i * 10,
- .hash = hash(i),
+ .hash = {},
});
}
@@ -1338,6 +1338,18 @@ test "fromOwnedArrayList" {
}
}
+test "auto store_hash" {
+ const HasCheapEql = AutoArrayHashMap(i32, i32);
+ const HasExpensiveEql = AutoArrayHashMap([32]i32, i32);
+ try testing.expect(meta.fieldInfo(HasCheapEql.Entry, .hash).field_type == void);
+ try testing.expect(meta.fieldInfo(HasExpensiveEql.Entry, .hash).field_type != void);
+
+ const HasCheapEqlUn = AutoArrayHashMapUnmanaged(i32, i32);
+ const HasExpensiveEqlUn = AutoArrayHashMapUnmanaged([32]i32, i32);
+ try testing.expect(meta.fieldInfo(HasCheapEqlUn.Entry, .hash).field_type == void);
+ try testing.expect(meta.fieldInfo(HasExpensiveEqlUn.Entry, .hash).field_type != void);
+}
+
pub fn getHashPtrAddrFn(comptime K: type) (fn (K) u32) {
return struct {
fn hash(key: K) u32 {