// run // Copyright 2026 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 main import ( "fmt" "hash/maphash" ) func main() { testEmpty() testNonEmpty() } func testEmpty() { s := maphash.MakeSeed() hashes := map[uint64]struct{}{} addHash := func(x any) { var h maphash.Hash h.SetSeed(s) var c maphash.ComparableHasher[any] c.Hash(&h, x) hashes[h.Sum64()] = struct{}{} } addHash(int64(0)) addHash(uint64(0)) addHash(int(0)) addHash(uint(0)) if len(hashes) < 3 { panic(fmt.Sprintf("too few hashes %v\n", hashes)) } } type I interface { foo() } type I1 int64 type I2 uint64 type I3 int type I4 uint func (i I1) foo() {} func (i I2) foo() {} func (i I3) foo() {} func (i I4) foo() {} func testNonEmpty() { s := maphash.MakeSeed() hashes := map[uint64]struct{}{} addHash := func(x I) { var h maphash.Hash h.SetSeed(s) var c maphash.ComparableHasher[I] c.Hash(&h, x) hashes[h.Sum64()] = struct{}{} } addHash(I1(0)) addHash(I2(0)) addHash(I3(0)) addHash(I4(0)) if len(hashes) < 3 { panic(fmt.Sprintf("too few hashes %v\n", hashes)) } }