diff options
| author | Matthew Borkowski <matthew.h.borkowski@gmail.com> | 2021-05-10 19:10:14 -0400 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2021-05-11 16:14:23 +0300 |
| commit | 75ed835d085e2f9dd042a1b39a61df95248a76df (patch) | |
| tree | 67f95f3eb810ce9abdf6c2c742d8833af1457589 /lib/std/array_hash_map.zig | |
| parent | ac546f56eb2b9fd50a69f1d0bda3d0d070b76f52 (diff) | |
| download | zig-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.zig | 20 |
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 { |
