| // Copyright 2019 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 hash_test | |
| import ( | |
| "bytes/hash" | |
| basehash "hash" | |
| "testing" | |
| ) | |
| func TestUnseededHash(t *testing.T) { | |
| m := map[uint64]struct{}{} | |
| for i := 0; i < 1000; i++ { | |
| h := hash.New() | |
| m[h.Hash()] = struct{}{} | |
| } | |
| if len(m) < 900 { | |
| t.Errorf("empty hash not sufficiently random: got %d, want 1000", len(m)) | |
| } | |
| } | |
| func TestSeededHash(t *testing.T) { | |
| s := hash.MakeSeed(1234) | |
| m := map[uint64]struct{}{} | |
| for i := 0; i < 1000; i++ { | |
| h := hash.New() | |
| h.SetSeed(s) | |
| m[h.Hash()] = struct{}{} | |
| } | |
| if len(m) != 1 { | |
| t.Errorf("seeded hash is random: got %d, want 1", len(m)) | |
| } | |
| } | |
| func TestHashGrouping(t *testing.T) { | |
| b := []byte("foo") | |
| h1 := hash.New() | |
| h2 := hash.New() | |
| h2.SetSeed(h1.Seed()) | |
| h1.AddBytes(b) | |
| for _, x := range b { | |
| h2.AddByte(x) | |
| } | |
| if h1.Hash() != h2.Hash() { | |
| t.Errorf("hash of \"foo\" and \"f\",\"o\",\"o\" not identical") | |
| } | |
| } | |
| func TestHashBytesVsString(t *testing.T) { | |
| s := "foo" | |
| b := []byte(s) | |
| h1 := hash.New() | |
| h2 := hash.New() | |
| h2.SetSeed(h1.Seed()) | |
| h1.AddString(s) | |
| h2.AddBytes(b) | |
| if h1.Hash() != h2.Hash() { | |
| t.Errorf("hash of string and byts not identical") | |
| } | |
| } | |
| // Make sure a Hash implements the hash.Hash and hash.Hash64 interfaces. | |
| var _ basehash.Hash = &hash.Hash{} | |
| var _ basehash.Hash64 = &hash.Hash{} |