// Copyright 2024 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sync import ( "internal/abi" "unsafe" ) // NewBadHashTrieMap creates a new HashTrieMap for the provided key and value // but with an intentionally bad hash function. func NewBadHashTrieMap[K, V comparable]() *HashTrieMap[K, V] { // Stub out the good hash function with a terrible one. // Everything should still work as expected. var m HashTrieMap[K, V] m.init() m.keyHash = func(_ unsafe.Pointer, _ uintptr) uintptr { return 0 } return &m } // NewTruncHashTrieMap creates a new HashTrieMap for the provided key and value // but with an intentionally bad hash function. func NewTruncHashTrieMap[K, V comparable]() *HashTrieMap[K, V] { // Stub out the good hash function with a terrible one. // Everything should still work as expected. var m HashTrieMap[K, V] var mx map[string]int mapType := abi.TypeOf(mx).MapType() hasher := mapType.Hasher m.keyHash = func(p unsafe.Pointer, n uintptr) uintptr { return hasher(p, n) & ((uintptr(1) << 4) - 1) } return &m }