aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/hash
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2020-02-26 11:15:50 -0800
committerIan Lance Taylor <iant@golang.org>2020-02-26 12:19:13 -0800
commitc5decc83e4eb06103c801fd4f8215301ce746109 (patch)
tree5443f7ec2e16fac152fe1af564d10b0d29ff1b95 /libgo/go/hash
parent051b9873e78fe1acb1a3fecd0c6e5685b6c12fb3 (diff)
downloadgcc-c5decc83e4eb06103c801fd4f8215301ce746109.zip
gcc-c5decc83e4eb06103c801fd4f8215301ce746109.tar.gz
gcc-c5decc83e4eb06103c801fd4f8215301ce746109.tar.bz2
libgo: update to final Go1.14 release
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/221158
Diffstat (limited to 'libgo/go/hash')
-rw-r--r--libgo/go/hash/maphash/maphash.go14
-rw-r--r--libgo/go/hash/maphash/maphash_test.go23
2 files changed, 34 insertions, 3 deletions
diff --git a/libgo/go/hash/maphash/maphash.go b/libgo/go/hash/maphash/maphash.go
index 3f406e9..071dc04 100644
--- a/libgo/go/hash/maphash/maphash.go
+++ b/libgo/go/hash/maphash/maphash.go
@@ -5,10 +5,13 @@
// Package maphash provides hash functions on byte sequences.
// These hash functions are intended to be used to implement hash tables or
// other data structures that need to map arbitrary strings or byte
-// sequences to a uniform distribution of integers.
+// sequences to a uniform distribution on unsigned 64-bit integers.
//
// The hash functions are collision-resistant but not cryptographically secure.
// (See crypto/sha256 and crypto/sha512 for cryptographic use.)
+//
+// The hash value of a given byte sequence is consistent within a
+// single process, but will be different in different processes.
package maphash
import "unsafe"
@@ -66,7 +69,7 @@ type Hash struct {
// which does call h.initSeed.)
func (h *Hash) initSeed() {
if h.seed.s == 0 {
- h.SetSeed(MakeSeed())
+ h.setSeed(MakeSeed())
}
}
@@ -121,12 +124,17 @@ func (h *Hash) Seed() Seed {
// Two Hash objects with different seeds will very likely behave differently.
// Any bytes added to h before this call will be discarded.
func (h *Hash) SetSeed(seed Seed) {
+ h.setSeed(seed)
+ h.n = 0
+}
+
+// setSeed sets seed without discarding accumulated data.
+func (h *Hash) setSeed(seed Seed) {
if seed.s == 0 {
panic("maphash: use of uninitialized Seed")
}
h.seed = seed
h.state = seed
- h.n = 0
}
// Reset discards all bytes added to h.
diff --git a/libgo/go/hash/maphash/maphash_test.go b/libgo/go/hash/maphash/maphash_test.go
index 31d84a3..0164a9e 100644
--- a/libgo/go/hash/maphash/maphash_test.go
+++ b/libgo/go/hash/maphash/maphash_test.go
@@ -83,6 +83,29 @@ func TestHashHighBytes(t *testing.T) {
}
}
+func TestRepeat(t *testing.T) {
+ h1 := new(Hash)
+ h1.WriteString("testing")
+ sum1 := h1.Sum64()
+
+ h1.Reset()
+ h1.WriteString("testing")
+ sum2 := h1.Sum64()
+
+ if sum1 != sum2 {
+ t.Errorf("different sum after reseting: %#x != %#x", sum1, sum2)
+ }
+
+ h2 := new(Hash)
+ h2.SetSeed(h1.Seed())
+ h2.WriteString("testing")
+ sum3 := h2.Sum64()
+
+ if sum1 != sum3 {
+ t.Errorf("different sum on the same seed: %#x != %#x", sum1, sum3)
+ }
+}
+
// Make sure a Hash implements the hash.Hash and hash.Hash64 interfaces.
var _ hash.Hash = &Hash{}
var _ hash.Hash64 = &Hash{}