authorgravatar for matthew.h.borkowski@gmail.comMatthew Borkowski <matthew.h.borkowski@gmail.com> 2021-05-10 19:10:14-04:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2021-05-11 16:14:23+03:00
log75ed835d085e2f9dd042a1b39a61df95248a76df
tree67f95f3eb810ce9abdf6c2c742d8833af1457589
parentac546f56eb2b9fd50a69f1d0bda3d0d070b76f52

fix AutoArrayHashMap's store_hash logic


1 files changed, 16 insertions(+), 4 deletions(-)

lib/std/array_hash_map.zig+16-4
......@@ -18,11 +18,11 @@ const builtin = @import("builtin");
1818const hash_map = @This();
1919
2020pub fn AutoArrayHashMap(comptime K: type, comptime V: type) type {
21 return ArrayHashMap(K, V, getAutoHashFn(K), getAutoEqlFn(K), autoEqlIsCheap(K));
21 return ArrayHashMap(K, V, getAutoHashFn(K), getAutoEqlFn(K), !autoEqlIsCheap(K));
2222}
2323
2424pub fn AutoArrayHashMapUnmanaged(comptime K: type, comptime V: type) type {
25 return ArrayHashMapUnmanaged(K, V, getAutoHashFn(K), getAutoEqlFn(K), autoEqlIsCheap(K));
25 return ArrayHashMapUnmanaged(K, V, getAutoHashFn(K), getAutoEqlFn(K), !autoEqlIsCheap(K));
2626}
2727
2828/// Builtin hashmap for strings as keys.
......@@ -1294,7 +1294,7 @@ test "reIndex" {
12941294 try al.append(std.testing.allocator, .{
12951295 .key = i,
12961296 .value = i * 10,
1297 .hash = hash(i),
1297 .hash = {},
12981298 });
12991299 }
13001300
......@@ -1321,7 +1321,7 @@ test "fromOwnedArrayList" {
13211321 try al.append(std.testing.allocator, .{
13221322 .key = i,
13231323 .value = i * 10,
1324 .hash = hash(i),
1324 .hash = {},
13251325 });
13261326 }
13271327
......@@ -1338,6 +1338,18 @@ test "fromOwnedArrayList" {
13381338 }
13391339}
13401340
1341test "auto store_hash" {
1342 const HasCheapEql = AutoArrayHashMap(i32, i32);
1343 const HasExpensiveEql = AutoArrayHashMap([32]i32, i32);
1344 try testing.expect(meta.fieldInfo(HasCheapEql.Entry, .hash).field_type == void);
1345 try testing.expect(meta.fieldInfo(HasExpensiveEql.Entry, .hash).field_type != void);
1346
1347 const HasCheapEqlUn = AutoArrayHashMapUnmanaged(i32, i32);
1348 const HasExpensiveEqlUn = AutoArrayHashMapUnmanaged([32]i32, i32);
1349 try testing.expect(meta.fieldInfo(HasCheapEqlUn.Entry, .hash).field_type == void);
1350 try testing.expect(meta.fieldInfo(HasExpensiveEqlUn.Entry, .hash).field_type != void);
1351}
1352
13411353pub fn getHashPtrAddrFn(comptime K: type) (fn (K) u32) {
13421354 return struct {
13431355 fn hash(key: K) u32 {