hashcode: "Strings" function for hashing slices of strings

This commit is contained in:
Arthur Burkart 2017-10-20 17:54:23 -04:00 committed by Martin Atkins
parent 314ef8b110
commit 013df9350b
2 changed files with 24 additions and 0 deletions

View File

@ -1,6 +1,8 @@
package hashcode package hashcode
import ( import (
"bytes"
"fmt"
"hash/crc32" "hash/crc32"
) )
@ -20,3 +22,14 @@ func String(s string) int {
// v == MinInt // v == MinInt
return 0 return 0
} }
// Strings hashes a list of strings to a unique hashcode.
func Strings(strings []string) string {
var buf bytes.Buffer
for _, s := range strings {
buf.WriteString(fmt.Sprintf("%s-", s))
}
return fmt.Sprintf("%d", String(buf.String()))
}

View File

@ -15,6 +15,17 @@ func TestString(t *testing.T) {
} }
} }
func TestStrings(t *testing.T) {
v := []string{"hello", ",", "world"}
expected := Strings(v)
for i := 0; i < 100; i++ {
actual := Strings(v)
if actual != expected {
t.Fatalf("bad: %#v\n\t%#v", actual, expected)
}
}
}
func TestString_positiveIndex(t *testing.T) { func TestString_positiveIndex(t *testing.T) {
// "2338615298" hashes to uint32(2147483648) which is math.MinInt32 // "2338615298" hashes to uint32(2147483648) which is math.MinInt32
ips := []string{"192.168.1.3", "192.168.1.5", "2338615298"} ips := []string{"192.168.1.3", "192.168.1.5", "2338615298"}